diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 36a36043..5a22b587 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,6 +61,9 @@ jobs: - name: Check Headers run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' headerCheckAll + - name: Start up test databases + run: docker compose up --force-recreate -d --wait --quiet-pull + - name: Check headers if: matrix.java == 'temurin@11' && matrix.os == 'ubuntu-latest' run: sbt 'project ${{ matrix.project }}' '++ ${{ matrix.scala }}' headerCheckAll @@ -86,11 +89,11 @@ jobs: - name: Make target directories if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') - run: mkdir -p modules/skunk/js/target modules/circe/.jvm/target modules/generic/.jvm/target modules/doobie-pg/target unidocs/target modules/core/.native/target modules/sql/js/target modules/skunk/jvm/target modules/core/.js/target modules/circe/.js/target modules/sql/native/target modules/skunk/native/target modules/generic/.js/target modules/core/.jvm/target modules/sql/jvm/target modules/circe/.native/target modules/generic/.native/target project/target + run: mkdir -p modules/skunk/js/target modules/sql-core/.js/target modules/circe/.jvm/target modules/generic/.jvm/target modules/doobie-pg/target unidocs/target modules/core/.native/target modules/skunk/jvm/target modules/core/.js/target modules/doobie-core/target modules/circe/.js/target modules/skunk/native/target modules/generic/.js/target modules/doobie-oracle/target modules/sql-core/.jvm/target modules/core/.jvm/target modules/sql-pg/native/target modules/doobie-mssql/target modules/sql-pg/js/target modules/circe/.native/target modules/generic/.native/target modules/sql-pg/jvm/target modules/sql-core/.native/target project/target - name: Compress target directories if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') - run: tar cf targets.tar modules/skunk/js/target modules/circe/.jvm/target modules/generic/.jvm/target modules/doobie-pg/target unidocs/target modules/core/.native/target modules/sql/js/target modules/skunk/jvm/target modules/core/.js/target modules/circe/.js/target modules/sql/native/target modules/skunk/native/target modules/generic/.js/target modules/core/.jvm/target modules/sql/jvm/target modules/circe/.native/target modules/generic/.native/target project/target + run: tar cf targets.tar modules/skunk/js/target modules/sql-core/.js/target modules/circe/.jvm/target modules/generic/.jvm/target modules/doobie-pg/target unidocs/target modules/core/.native/target modules/skunk/jvm/target modules/core/.js/target modules/doobie-core/target modules/circe/.js/target modules/skunk/native/target modules/generic/.js/target modules/doobie-oracle/target modules/sql-core/.jvm/target modules/core/.jvm/target modules/sql-pg/native/target modules/doobie-mssql/target modules/sql-pg/js/target modules/circe/.native/target modules/generic/.native/target modules/sql-pg/jvm/target modules/sql-core/.native/target project/target - name: Upload target directories if: github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main') @@ -279,6 +282,9 @@ jobs: if: matrix.java == 'temurin@11' && steps.setup-java-temurin-11.outputs.cache-hit == 'false' run: sbt +update + - name: Start up test databases + run: docker compose up --force-recreate -d --wait --quiet-pull + - run: sbt coverage rootJVM/test coverageReport - uses: codecov/codecov-action@v3 diff --git a/README.md b/README.md index cf2392e6..05699393 100644 --- a/README.md +++ b/README.md @@ -23,14 +23,15 @@ backing data, and cursors into that data. It supports in-memory, DB-backed, and Grackle is structured as a compiler/interpreter. Queries are type-checked against a GraphQL schema and compiled into an internal query algebra. The query algebra may be further compiled in a backend-specific way to materialize data. In particular it can be compiled to efficient SQL and in that regard currently supports Postgres via -[Doobie](https://tpolecat.github.io/doobie/) or [Skunk](https://typelevel.org/skunk/). +[Doobie](https://tpolecat.github.io/doobie/) or [Skunk](https://typelevel.org/skunk/) and Oracle and SQL Server via +Doobie. Grackle is an [Apache 2.0 licensed](https://www.apache.org/licenses/LICENSE-2.0) Typelevel project and is available for Scala 2/3 and for [Scala.js](https://www.scala-js.org/) and [Scala Native](https://scala-native.org/en/stable/). Work has been generously sponsored by -[Aura/Gemini](https://www.aura-astronomy.org/centers/nsfs-oir-lab/gemini-observatory/) and [ITV](https://www.itv.com) -over the last four years. +[Aura/Gemini](https://www.aura-astronomy.org/centers/nsfs-oir-lab/gemini-observatory/), [ITV](https://www.itv.com) +and [imbus AG](https://www.imbus.de/) over the last five years. ## Getting Started @@ -55,8 +56,24 @@ libraryDependencies += "org.typelevel" %% "grackle-doobie-pg" % "0.22.0" // Optional: support for Postgres backend via Skunk libraryDependencies += "org.typelevel" %% "grackle-skunk" % "0.22.0" + +// Optional: support for Oracle backend via Doobie (JVM only) +libraryDependencies += "org.typelevel" %% "grackle-doobie-oracle" % "0.22.0" + +// Optional: support for SQL Server backend via Doobie (JVM only) +libraryDependencies += "org.typelevel" %% "grackle-doobie-mssql" % "0.22.0" ``` +## Running tests for database backed mappings + +Database backed mappings are tested against dockerized instances of Postgres, Oracle and SQL Server. This requires +Docker 2.20.2 or later to be installed and running on the test machine. + +Running tests (eg. `rootJVM/test`) will automatically spin up the relevant containers, which will stay up and can be +reused across multiple tests runs, significantly speeding up the test cycle. I recommend running `allUp` initially, to +pull images and initialise databases, before running tests the first time. Note that Oracle in particular takes quite +a long time to initialise, so expect `allUp` to take several minutes to complete the first time around. + ## Community Grackle is proud to be a [Typelevel](https://typelevel.org/) project. We are committed to providing a friendly, safe diff --git a/build.sbt b/build.sbt index bf4b62ed..fbba916e 100644 --- a/build.sbt +++ b/build.sbt @@ -1,5 +1,6 @@ import nl.zolotko.sbt.jfr.{JfrRecording, JfrRecorderOptions} import scala.concurrent.duration.DurationInt +import scala.sys.process._ val catsVersion = "2.11.0" val catsParseVersion = "1.0.0" @@ -9,28 +10,29 @@ val disciplineMunitVersion = "2.0.0-M3" val doobieVersion = "1.0.0-RC6" val fs2Version = "3.11.0" val http4sVersion = "0.23.29" -val jnrUnixsocketVersion = "0.38.23" val kindProjectorVersion = "0.13.3" val literallyVersion = "1.1.0" val logbackVersion = "1.5.12" val log4catsVersion = "2.7.0" +val mssqlDriverVersion = "12.8.1.jre11" val munitVersion = "1.0.0-M11" val munitCatsEffectVersion = "2.0.0" val munitScalaCheckVersion = "1.0.0-M11" +val oracleDriverVersion = "23.5.0.24.07" val skunkVersion = "0.6.4" val shapeless2Version = "2.3.11" val shapeless3Version = "3.4.1" val sourcePosVersion = "1.1.0" val typenameVersion = "1.1.0" -val whaleTailVersion = "0.0.12" val Scala2 = "2.13.15" val Scala3 = "3.3.4" + ThisBuild / scalaVersion := Scala2 ThisBuild / crossScalaVersions := Seq(Scala2, Scala3) ThisBuild / tlJdkRelease := Some(11) -ThisBuild / tlBaseVersion := "0.22" +ThisBuild / tlBaseVersion := "0.23" ThisBuild / startYear := Some(2019) ThisBuild / licenses := Seq(License.Apache2) ThisBuild / developers := List( @@ -42,10 +44,16 @@ ThisBuild / tlFatalWarnings := true ThisBuild / tlCiScalafmtCheck := false ThisBuild / tlCiReleaseBranches := Seq("main") ThisBuild / githubWorkflowBuild ~= { steps => - WorkflowStep.Sbt( - commands = List("headerCheckAll"), - name = Some("Check Headers"), - ) +: steps + Seq( + WorkflowStep.Sbt( + commands = List("headerCheckAll"), + name = Some("Check Headers") + ), + WorkflowStep.Run( + commands = List("docker compose up --force-recreate -d --wait --quiet-pull"), + name = Some("Start up test databases") + ) + ) ++ steps } ThisBuild / githubWorkflowJavaVersions := Seq(JavaSpec.temurin("11")) ThisBuild / tlBspCrossProjectPlatforms := Set(JVMPlatform) @@ -58,14 +66,39 @@ ThisBuild / githubWorkflowAddedJobs += sbtStepPreamble = Nil, steps = githubWorkflowJobSetup.value.toList ++ List( + WorkflowStep.Run( + commands = List("docker compose up --force-recreate -d --wait --quiet-pull"), + name = Some("Start up test databases") + ), WorkflowStep.Sbt(List("coverage", "rootJVM/test", "coverageReport")), WorkflowStep.Use(UseRef.Public("codecov", "codecov-action", "v3")) ) ) - ThisBuild / tlSitePublishBranch := Some("main") +lazy val allUp = taskKey[Unit]("Start all docker compose services") +lazy val allStop = taskKey[Unit]("Stop all docker compose services") +lazy val pgUp = taskKey[Unit]("Start Postgres") +lazy val pgStop = taskKey[Unit]("Stop Postgres") +lazy val oracleUp = taskKey[Unit]("Start Oracle") +lazy val oracleStop = taskKey[Unit]("Stop Oracle") +lazy val mssqlUp = taskKey[Unit]("Start SQL Server") +lazy val mssqlStop = taskKey[Unit]("Stop SQL Server") + +ThisBuild / allUp := runDocker("docker compose up -d --wait --quiet-pull") +ThisBuild / allStop := runDocker("docker compose stop") +ThisBuild / pgUp := runDocker("docker compose up -d --wait --quiet-pull postgres") +ThisBuild / pgStop := runDocker("docker compose stop postgres") +ThisBuild / oracleUp := runDocker("docker compose up -d --wait --quiet-pull oracle") +ThisBuild / oracleStop := runDocker("docker compose stop oracle") +ThisBuild / mssqlUp := runDocker("docker compose up -d --wait --quiet-pull mssql") +ThisBuild / mssqlStop := runDocker("docker compose stop mssql") + +def runDocker(cmd: String): Unit = { + require(cmd.! == 0, s"docker indicated an error") +} + lazy val commonSettings = Seq( //scalacOptions --= Seq("-Wunused:params", "-Wunused:imports", "-Wunused:patvars", "-Wdead-code", "-Wunused:locals", "-Wunused:privates", "-Wunused:implicits"), scalacOptions ++= Seq("-Xlint:-pattern-shadow").filterNot(_ => tlIsScala3.value), @@ -77,6 +110,7 @@ lazy val commonSettings = Seq( "org.typelevel" %%% "munit-cats-effect" % munitCatsEffectVersion % "test", "io.circe" %%% "circe-literal" % circeVersion % "test", "io.circe" %%% "circe-jawn" % circeVersion % "test", + "io.circe" %%% "circe-parser" % circeVersion % "test", ) ++ Seq( compilerPlugin("org.typelevel" %% "kind-projector" % kindProjectorVersion cross CrossVersion.full), ).filterNot(_ => tlIsScala3.value), @@ -103,8 +137,12 @@ lazy val commonSettings = Seq( lazy val modules: List[CompositeProject] = List( core, circe, - sql, - doobie, + sqlcore, + sqlpg, + doobiecore, + doobiepg, + doobieoracle, + doobiemssql, skunk, generic, docs, @@ -162,46 +200,94 @@ lazy val buildInfo = crossProject(JVMPlatform, JSPlatform, NativePlatform) buildInfoKeys += "baseDirectory" -> (LocalRootProject / baseDirectory).value.toString ) -lazy val sql = crossProject(JVMPlatform, JSPlatform, NativePlatform) - .crossType(CrossType.Full) - .in(file("modules/sql")) +lazy val sqlcore = crossProject(JVMPlatform, JSPlatform, NativePlatform) + .crossType(CrossType.Pure) + .in(file("modules/sql-core")) .enablePlugins(AutomateHeaderPlugin) .disablePlugins(RevolverPlugin) .dependsOn(core % "test->test;compile->compile", circe, buildInfo % Test) .settings(commonSettings) .settings( - name := "grackle-sql", + name := "grackle-sql-core", libraryDependencies ++= Seq( "io.circe" %%% "circe-generic" % circeVersion % "test", "co.fs2" %%% "fs2-io" % fs2Version % "test", ) ) - .platformsSettings(JVMPlatform, JSPlatform)( - libraryDependencies ++= Seq( - "io.chrisdavenport" %%% "whale-tail-manager" % whaleTailVersion % "test", - ) + +lazy val sqlpg = crossProject(JVMPlatform, JSPlatform, NativePlatform) + .crossType(CrossType.Full) + .in(file("modules/sql-pg")) + .enablePlugins(AutomateHeaderPlugin) + .disablePlugins(RevolverPlugin) + .dependsOn(sqlcore % "test->test;compile->compile", circe) + .settings(commonSettings) + .settings( + name := "grackle-sql-pg", ) - .jvmSettings( + +lazy val doobiecore = project + .in(file("modules/doobie-core")) + .enablePlugins(AutomateHeaderPlugin) + .disablePlugins(RevolverPlugin) + .dependsOn(sqlcore.jvm % "test->test;compile->compile", circe.jvm) + .settings(commonSettings) + .settings( + name := "grackle-doobie-core", + Test / fork := true, + Test / parallelExecution := false, libraryDependencies ++= Seq( - "com.github.jnr" % "jnr-unixsocket" % jnrUnixsocketVersion % "test" + "org.tpolecat" %% "doobie-core" % doobieVersion, + "org.typelevel" %% "log4cats-core" % log4catsVersion, + "ch.qos.logback" % "logback-classic" % logbackVersion % "test" ) ) -lazy val doobie = project +lazy val doobiepg = project .in(file("modules/doobie-pg")) .enablePlugins(AutomateHeaderPlugin) .disablePlugins(RevolverPlugin) - .dependsOn(sql.jvm % "test->test;compile->compile", circe.jvm) + .dependsOn(doobiecore % "test->test;compile->compile", sqlpg.jvm % "test->test;compile->compile") .settings(commonSettings) .settings( name := "grackle-doobie-pg", Test / fork := true, Test / parallelExecution := false, + Test / testOptions += Tests.Setup(_ => runDocker("docker compose up -d --wait --quiet-pull postgres")), libraryDependencies ++= Seq( - "org.tpolecat" %% "doobie-core" % doobieVersion, - "org.tpolecat" %% "doobie-postgres-circe" % doobieVersion, - "org.typelevel" %% "log4cats-core" % log4catsVersion, - "ch.qos.logback" % "logback-classic" % logbackVersion % "test" + "org.tpolecat" %% "doobie-postgres-circe" % doobieVersion + ) + ) + +lazy val doobieoracle = project + .in(file("modules/doobie-oracle")) + .enablePlugins(AutomateHeaderPlugin) + .disablePlugins(RevolverPlugin) + .dependsOn(doobiecore % "test->test;compile->compile") + .settings(commonSettings) + .settings( + name := "grackle-doobie-oracle", + Test / fork := true, + Test / parallelExecution := false, + Test / testOptions += Tests.Setup(_ => runDocker("docker compose up -d --wait --quiet-pull oracle")), + libraryDependencies ++= Seq( + "com.oracle.database.jdbc" % "ojdbc8" % oracleDriverVersion + ) + ) + +lazy val doobiemssql = project + .in(file("modules/doobie-mssql")) + .enablePlugins(AutomateHeaderPlugin) + .disablePlugins(RevolverPlugin) + .dependsOn(doobiecore % "test->test;compile->compile") + .settings(commonSettings) + .settings( + name := "grackle-doobie-mssql", + Test / fork := true, + Test / parallelExecution := false, + Test / testOptions += Tests.Setup(_ => runDocker("docker compose up -d --wait --quiet-pull mssql")), + libraryDependencies ++= Seq( + "com.microsoft.sqlserver" % "mssql-jdbc" % mssqlDriverVersion ) ) @@ -210,7 +296,7 @@ lazy val skunk = crossProject(JVMPlatform, JSPlatform, NativePlatform) .in(file("modules/skunk")) .enablePlugins(AutomateHeaderPlugin) .disablePlugins(RevolverPlugin) - .dependsOn(sql % "test->test;compile->compile", circe) + .dependsOn(sqlpg % "test->test;compile->compile", circe) .settings(commonSettings) .settings( name := "grackle-skunk", @@ -223,6 +309,7 @@ lazy val skunk = crossProject(JVMPlatform, JSPlatform, NativePlatform) ) .jvmSettings( Test / fork := true, + Test / testOptions += Tests.Setup(_ => runDocker("docker compose up -d --wait --quiet-pull postgres")), libraryDependencies ++= Seq( "ch.qos.logback" % "logback-classic" % logbackVersion % "test" ) @@ -247,10 +334,12 @@ lazy val generic = crossProject(JVMPlatform, JSPlatform, NativePlatform) }) ) +import spray.revolver.Actions._ + lazy val demo = project .in(file("demo")) .enablePlugins(NoPublishPlugin, AutomateHeaderPlugin) - .dependsOn(buildInfo.jvm, core.jvm, generic.jvm, doobie) + .dependsOn(buildInfo.jvm, core.jvm, generic.jvm, doobiepg) .settings(commonSettings) .settings( name := "grackle-demo", @@ -264,10 +353,13 @@ lazy val demo = project "org.http4s" %% "http4s-ember-server" % http4sVersion, "org.http4s" %% "http4s-ember-client" % http4sVersion, "org.http4s" %% "http4s-circe" % http4sVersion, - "org.http4s" %% "http4s-dsl" % http4sVersion, - "io.chrisdavenport" %% "whale-tail-manager" % whaleTailVersion, - "com.github.jnr" % "jnr-unixsocket" % jnrUnixsocketVersion - ) + "org.http4s" %% "http4s-dsl" % http4sVersion + ), + reStart := // Redefine reStart to depend on pgUp + Def.inputTask(reStart.evaluated) + .dependsOn(Compile / products) + .dependsOn(ThisBuild / pgUp) + .evaluated ) lazy val benchmarks = project @@ -275,15 +367,15 @@ lazy val benchmarks = project .dependsOn(core.jvm) .enablePlugins(NoPublishPlugin, AutomateHeaderPlugin, JmhPlugin) .settings(commonSettings) - .settings( + .settings( coverageEnabled := false, -) + ) lazy val profile = project .in(file("profile")) .enablePlugins(NoPublishPlugin, AutomateHeaderPlugin) .dependsOn(core.jvm) - .dependsOn(doobie) + .dependsOn(doobiepg) .settings(commonSettings) .settings( jfrRecordings := Seq( @@ -338,8 +430,12 @@ lazy val unidocs = project ScalaUnidoc / unidoc / unidocProjectFilter := inProjects( core.jvm, circe.jvm, - sql.jvm, - doobie, + sqlcore.jvm, + sqlpg.jvm, + doobiecore, + doobiepg, + doobieoracle, + doobiemssql, skunk.jvm, generic.jvm, ) diff --git a/demo/src/main/scala/demo/world/WorldData.scala b/demo/src/main/scala/demo/world/WorldData.scala index 432ca455..d5e89fb6 100644 --- a/demo/src/main/scala/demo/world/WorldData.scala +++ b/demo/src/main/scala/demo/world/WorldData.scala @@ -18,45 +18,11 @@ package demo.world import java.util.concurrent.Executors import scala.concurrent.ExecutionContext -import scala.concurrent.duration._ import cats.effect.{Async, Resource} -import cats.syntax.all._ import doobie.hikari.HikariTransactor -import io.chrisdavenport.whaletail.{Containers, Docker} -import io.chrisdavenport.whaletail.manager._ object WorldData { - def mkContainer[F[_]: Async]: Resource[F, PostgresConnectionInfo] = - Docker.default[F].flatMap(client => - WhaleTailContainer.build( - client, - image = "postgres", - tag = "11.8".some, - ports = Map(PostgresConnectionInfo.DefaultPort -> None), - binds = List(Containers.Bind(bindPath("demo/src/main/resources/db/"), "/docker-entrypoint-initdb.d/", "ro")), - env = Map( - "POSTGRES_USER" -> "test", - "POSTGRES_PASSWORD" -> "test", - "POSTGRES_DB" -> "test" - ), - labels = Map.empty - ).evalTap( - ReadinessStrategy.checkReadiness( - client, - _, - ReadinessStrategy.LogRegex(".*database system is ready to accept connections.*".r, 2), - 30.seconds - ) - ) - ).flatMap(container => - Resource.eval( - container.ports.get(PostgresConnectionInfo.DefaultPort).liftTo[F](new Throwable("Missing Port")) - ) - ).map { - case (host, port) => PostgresConnectionInfo(host, port) - } - def mkTransactor[F[_]: Async](connInfo: PostgresConnectionInfo): Resource[F, HikariTransactor[F]] = { import connInfo._ HikariTransactor.newHikariTransactor[F]( diff --git a/demo/src/main/scala/demo/world/WorldMapping.scala b/demo/src/main/scala/demo/world/WorldMapping.scala index 80521fb3..15aee258 100644 --- a/demo/src/main/scala/demo/world/WorldMapping.scala +++ b/demo/src/main/scala/demo/world/WorldMapping.scala @@ -22,7 +22,8 @@ import grackle.Query._ import grackle.QueryCompiler._ import grackle.Value._ import grackle._ -import grackle.doobie.postgres.{DoobieMapping, DoobieMonitor, LoggedDoobieMappingCompanion} +import grackle.doobie.{DoobieMonitor, LoggedDoobieMappingCompanion} +import grackle.doobie.postgres.{DoobiePgMapping} import grackle.sql.Like import grackle.syntax._ import org.typelevel.log4cats.Logger @@ -30,7 +31,7 @@ import org.typelevel.log4cats.slf4j.Slf4jLogger import WorldData._ -trait WorldMapping[F[_]] extends DoobieMapping[F] { +trait WorldMapping[F[_]] extends DoobiePgMapping[F] { // #db_tables object country extends TableDef("country") { val code = col("code", Meta[String]) @@ -230,7 +231,7 @@ trait WorldMapping[F[_]] extends DoobieMapping[F] { object WorldMapping extends LoggedDoobieMappingCompanion { def mkMapping[F[_]: Sync](transactor: Transactor[F], monitor: DoobieMonitor[F]): WorldMapping[F] = - new DoobieMapping(transactor, monitor) with WorldMapping[F] + new DoobiePgMapping(transactor, monitor) with WorldMapping[F] def mkMappingFromTransactor[F[_]: Sync](transactor: Transactor[F]): WorldMapping[F] = { val logger: Logger[F] = Slf4jLogger.getLoggerFromName[F]("SqlQueryLogger") @@ -238,9 +239,10 @@ object WorldMapping extends LoggedDoobieMappingCompanion { mkMapping(transactor, monitor) } - def apply[F[_]: Async]: Resource[F, WorldMapping[F]] = + def apply[F[_]: Async]: Resource[F, WorldMapping[F]] = { + val connInfo = PostgresConnectionInfo("localhost", PostgresConnectionInfo.DefaultPort) for { - connInfo <- mkContainer[F] transactor <- mkTransactor[F](connInfo) } yield mkMappingFromTransactor[F](transactor) + } } diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..c122fd6f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,54 @@ +services: + postgres: + image: postgres:11.8 + ports: + - "5432:5432" + environment: + - POSTGRES_DB=test + - POSTGRES_USER=test + - POSTGRES_PASSWORD=test + volumes: + - ./testdata/pg/:/docker-entrypoint-initdb.d/ + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 + + oracle: + image: gvenzl/oracle-free:23-slim-faststart + ports: + - "1521:1521" + environment: + ORACLE_PASSWORD: test + volumes: + - ./testdata/oracle/:/grackle-initdb.d/ + - ./modules/doobie-oracle/src/test/resources/scripts/:/container-entrypoint-initdb.d/ + healthcheck: + test: bash -c "[ -f /tmp/healthy ]" + interval: 10s + timeout: 5s + retries: 10 + start_period: 5s + start_interval: 5s + + mssql: + image: mcr.microsoft.com/mssql/server:2022-latest + ports: + - "1433:1433" + environment: + SA_PASSWORD: Test_123_Test + MSSQL_PID: Developer + ACCEPT_EULA: Y + MSSQL_TCP_PORT: 1433 + volumes: + - ./testdata/mssql/:/grackle-initdb.d/ + - ./modules/doobie-mssql/src/test/resources/scripts/:/container-entrypoint-initdb.d/ + entrypoint: ["/bin/bash", "/container-entrypoint-initdb.d/entrypoint.sh"] + healthcheck: + test: bash -c "[ -f /tmp/healthy ]" + interval: 10s + timeout: 5s + retries: 10 + start_period: 5s + start_interval: 5s diff --git a/docs/index.md b/docs/index.md index 457f126f..9b7cd8e8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,14 +17,15 @@ backing data, and cursors into that data. It supports in-memory, DB-backed, and Grackle is structured as a compiler/interpreter. Queries are type-checked against a GraphQL schema and compiled into an internal query algebra. The query algebra may be further compiled in a backend-specific way to materialize data. In particular it can be compiled to efficient SQL and in that regard currently supports Postgres via -[Doobie](https://tpolecat.github.io/doobie/) or [Skunk](https://typelevel.org/skunk/). +[Doobie](https://tpolecat.github.io/doobie/) or [Skunk](https://typelevel.org/skunk/) and Oracle and SQL Server via +Doobie. Grackle is an [Apache 2.0 licensed](https://www.apache.org/licenses/LICENSE-2.0) Typelevel project and is available for Scala 2/3 and for [Scala.js](https://www.scala-js.org/) and [Scala Native](https://scala-native.org/en/stable/). Work has been generously sponsored by -[Aura/Gemini](https://www.aura-astronomy.org/centers/nsfs-oir-lab/gemini-observatory/) and [ITV](https://www.itv.com) -over the last four years. +[Aura/Gemini](https://www.aura-astronomy.org/centers/nsfs-oir-lab/gemini-observatory/), [ITV](https://www.itv.com) +and [imbus AG](https://www.imbus.de/) over the last five years. ## Getting Started @@ -49,8 +50,24 @@ libraryDependencies += "org.typelevel" %% "grackle-doobie-pg" % "@VERSION@" // Optional: support for Postgres backend via Skunk libraryDependencies += "org.typelevel" %% "grackle-skunk" % "@VERSION@" + +// Optional: support for Oracle backend via Doobie (JVM only) +libraryDependencies += "org.typelevel" %% "grackle-doobie-oracle" % "@VERSION@" + +// Optional: support for SQL Server backend via Doobie (JVM only) +libraryDependencies += "org.typelevel" %% "grackle-doobie-mssql" % "@VERSION@" ``` +## Running tests for database backed mappings + +Database backed mappings are tested against dockerized instances of Postgres, Oracle and SQL Server. This requires +Docker 2.20.2 or later to be installed and running on the test machine. + +Running tests (eg. `rootJVM/test`) will automatically spin up the relevant containers, which will stay up and can be +reused across multiple tests runs, significantly speeding up the test cycle. I recommend running `allUp` initially, to +pull images and initialise databases, before running tests the first time. Note that Oracle in particular takes quite +a long time to initialise, so expect `allUp` to take several minutes to complete the first time around. + ## Community Grackle is proud to be a [Typelevel](https://typelevel.org/) project. We are committed to providing a friendly, safe diff --git a/local-docker-compose.yml b/local-docker-compose.yml deleted file mode 100644 index 58d19909..00000000 --- a/local-docker-compose.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: "3.7" - -services: - postgres: - image: postgres:11.8 - ports: - - "5432:5432" - environment: - - POSTGRES_DB=test - - POSTGRES_USER=test - - POSTGRES_PASSWORD=test - volumes: - - ./modules/sql/shared/src/test/resources/db/:/docker-entrypoint-initdb.d/ diff --git a/modules/doobie-pg/src/main/scala/DoobieMapping.scala b/modules/doobie-core/src/main/scala/DoobieMapping.scala similarity index 98% rename from modules/doobie-pg/src/main/scala/DoobieMapping.scala rename to modules/doobie-core/src/main/scala/DoobieMapping.scala index d24f8fd1..981f647c 100644 --- a/modules/doobie-pg/src/main/scala/DoobieMapping.scala +++ b/modules/doobie-core/src/main/scala/DoobieMapping.scala @@ -14,7 +14,7 @@ // limitations under the License. package grackle -package doobie.postgres +package doobie import java.sql.ResultSet @@ -100,7 +100,7 @@ trait DoobieMappingLike[F[_]] extends Mapping[F] with SqlMappingLike[F] { case _ => false } - def sqlTypeName(codec: Codec): Option[String] = + def sqlTypeName(codec: Codec): Option[String] = { codec._1.put.jdbcTargets.head match { case BigInt => Some("BIGINT") case Binary => Some("BINARY") @@ -147,6 +147,7 @@ trait DoobieMappingLike[F[_]] extends Mapping[F] with SqlMappingLike[F] { case _ => None } + } } def fetch(fragment: Fragment, codecs: List[(Boolean, Codec)]): F[Vector[Array[Any]]] = { diff --git a/modules/doobie-pg/src/main/scala/DoobieMappingCompanion.scala b/modules/doobie-core/src/main/scala/DoobieMappingCompanion.scala similarity index 98% rename from modules/doobie-pg/src/main/scala/DoobieMappingCompanion.scala rename to modules/doobie-core/src/main/scala/DoobieMappingCompanion.scala index d9644b2a..e7510b3c 100644 --- a/modules/doobie-pg/src/main/scala/DoobieMappingCompanion.scala +++ b/modules/doobie-core/src/main/scala/DoobieMappingCompanion.scala @@ -14,7 +14,7 @@ // limitations under the License. package grackle -package doobie.postgres +package doobie import _root_.doobie.util.transactor.Transactor import cats.effect.Sync diff --git a/modules/doobie-pg/src/main/scala/DoobieMonitor.scala b/modules/doobie-core/src/main/scala/DoobieMonitor.scala similarity index 98% rename from modules/doobie-pg/src/main/scala/DoobieMonitor.scala rename to modules/doobie-core/src/main/scala/DoobieMonitor.scala index 805c6091..2b82e0d3 100644 --- a/modules/doobie-pg/src/main/scala/DoobieMonitor.scala +++ b/modules/doobie-core/src/main/scala/DoobieMonitor.scala @@ -14,7 +14,7 @@ // limitations under the License. package grackle -package doobie.postgres +package doobie import _root_.doobie.Fragment import cats.Applicative diff --git a/modules/doobie-pg/src/main/scala/package.scala b/modules/doobie-core/src/main/scala/package.scala similarity index 94% rename from modules/doobie-pg/src/main/scala/package.scala rename to modules/doobie-core/src/main/scala/package.scala index a716eaa1..d2320c28 100644 --- a/modules/doobie-pg/src/main/scala/package.scala +++ b/modules/doobie-core/src/main/scala/package.scala @@ -13,11 +13,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -package grackle.doobie +package grackle import grackle.sql.SqlMonitor import _root_.doobie.Fragment -package object postgres { +package object doobie { type DoobieMonitor[F[_]] = SqlMonitor[F, Fragment] } diff --git a/modules/doobie-pg/src/test/scala/DoobieDatabaseSuite.scala b/modules/doobie-core/src/test/scala/DoobieDatabaseSuite.scala similarity index 58% rename from modules/doobie-pg/src/test/scala/DoobieDatabaseSuite.scala rename to modules/doobie-core/src/test/scala/DoobieDatabaseSuite.scala index 25f88d4b..7d4bfa34 100644 --- a/modules/doobie-pg/src/test/scala/DoobieDatabaseSuite.scala +++ b/modules/doobie-core/src/test/scala/DoobieDatabaseSuite.scala @@ -13,38 +13,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -package grackle.doobie.test +package grackle.doobie +package test -import java.time.{Duration, LocalDate, LocalTime, OffsetDateTime} -import java.util.UUID +import java.time.Duration -import cats.effect.{IO, Sync} -import doobie.postgres.implicits._ -import doobie.postgres.circe.jsonb.implicits._ -import doobie.{Get, Meta, Put, Transactor} -import io.circe.Json - -import grackle.doobie.postgres.{DoobieMapping, DoobieMonitor} +import doobie.Meta +import io.circe.{Decoder => CDecoder, Encoder => CEncoder} +import munit.CatsEffectSuite import grackle.sql.test._ -trait DoobieDatabaseSuite extends SqlDatabaseSuite { - // lazy vals because the container is not initialised until the test is run - lazy val xa = { - val connInfo = postgresConnectionInfo() - import connInfo._ - - Transactor.fromDriverManager[IO]( - driverClassName, - jdbcUrl, - username, - password, - None - ) - } - - abstract class DoobieTestMapping[F[_]: Sync](transactor: Transactor[F], monitor: DoobieMonitor[F] = DoobieMonitor.noopMonitor[IO]) - extends DoobieMapping[F](transactor, monitor) with SqlTestMapping[F] { +trait DoobieDatabaseSuite extends CatsEffectSuite { + trait DoobieTestMapping[F[_]] extends DoobieMappingLike[F] with SqlTestMapping[F] { type TestCodec[T] = (Meta[T], Boolean) @@ -59,17 +40,11 @@ trait DoobieDatabaseSuite extends SqlDatabaseSuite { def float8: TestCodec[Double] = (Meta[Double], false) def numeric(precision: Int, scale: Int): TestCodec[BigDecimal] = (Meta[BigDecimal], false) - def uuid: TestCodec[UUID] = (Meta[UUID], false) - def localDate: TestCodec[LocalDate] = (Meta[LocalDate], false) - def localTime: TestCodec[LocalTime] = (Meta[LocalTime], false) - def offsetDateTime: TestCodec[OffsetDateTime] = (Meta[OffsetDateTime], false) def duration: TestCodec[Duration] = (Meta[Long].timap(Duration.ofMillis)(_.toMillis), false) - def jsonb: TestCodec[Json] = (new Meta(Get[Json], Put[Json]), false) - def nullable[T](c: TestCodec[T]): TestCodec[T] = (c._1, true) - def list[T](c: TestCodec[T]): TestCodec[List[T]] = { + def list[T: CDecoder : CEncoder](c: TestCodec[T]): TestCodec[List[T]] = { val cm = c._1 val decode = cm.get.get.k.asInstanceOf[String => T] val encode = cm.put.put.k.asInstanceOf[T => String] diff --git a/modules/doobie-mssql/src/main/scala/DoobieMSSqlMapping.scala b/modules/doobie-mssql/src/main/scala/DoobieMSSqlMapping.scala new file mode 100644 index 00000000..bf66a42e --- /dev/null +++ b/modules/doobie-mssql/src/main/scala/DoobieMSSqlMapping.scala @@ -0,0 +1,111 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.mssql + +import cats.effect.Sync +import cats.syntax.all._ +import _root_.doobie.Transactor + +import grackle.Mapping +import grackle.Query.OrderSelection +import grackle.doobie._ +import grackle.sql._ + +abstract class DoobieMSSqlMapping[F[_]]( + val transactor: Transactor[F], + val monitor: DoobieMonitor[F], +)( + implicit val M: Sync[F] +) extends Mapping[F] with DoobieMSSqlMappingLike[F] + +trait DoobieMSSqlMappingLike[F[_]] extends DoobieMappingLike[F] with SqlMappingLike[F] { + import SqlQuery.SqlSelect + import TableExpr.Laterality + + def collateToFragment: Fragment = + Fragments.const(" COLLATE DATABASE_DEFAULT") + + def aliasDefToFragment(alias: String): Fragment = + Fragments.const(s" $alias") + + def offsetToFragment(offset: Fragment): Fragment = + Fragments.const(" OFFSET ") |+| offset |+| Fragments.const(" ROWS") + + def limitToFragment(limit: Fragment): Fragment = + Fragments.const(" FETCH FIRST ") |+| limit |+| Fragments.const(" ROWS ONLY") + + def likeToFragment(expr: Fragment, pattern: String, caseInsensitive: Boolean): Fragment = { + val casedExpr = if(caseInsensitive) Fragments.const("UPPER(") |+| expr |+| Fragments.const(s")") else expr + val casedPattern = if(caseInsensitive) pattern.toUpperCase else pattern + casedExpr |+| Fragments.const(s" LIKE ") |+| Fragments.bind(stringEncoder, casedPattern) + } + + def ascribedNullToFragment(codec: Codec): Fragment = + Fragments.sqlTypeName(codec) match { + case Some(name) if !name.startsWith("_") => + val convName = + name match { + case "VARCHAR" => "CHAR" + case "NVARCHAR" => "NCHAR" + case "INTEGER" => "INTEGER" + case "BIGINT" => "BIGINT" + case "BOOLEAN" => "BIT" + case "TIMESTAMP" => "DATETIMEOFFSET" // TODO: Probably shouldn't be TIMESTAMP on the LHS + case other => other + } + Fragments.const(s"CAST(NULL AS $convName)") + case _ => Fragments.const("NULL") + } + + def collateSelected: Boolean = false + + def distinctOnToFragment(dcols: List[Fragment]): Fragment = + Fragments.const("DISTINCT ") + + def distinctOrderColumn(owner: ColumnOwner, col: SqlColumn, predCols: List[SqlColumn], orders: List[OrderSelection[_]]): SqlColumn = + SqlColumn.FirstValueColumn(owner, col, predCols, orders) + + def encapsulateUnionBranch(s: SqlSelect): SqlSelect = + if(s.orders.isEmpty) s + else s.toSubquery(s.table.name+"_encaps", Laterality.NotLateral) + + def mkLateral(inner: Boolean): Laterality = + Laterality.Apply(inner) + + def defaultOffsetForSubquery(subquery: SqlQuery): SqlQuery = + subquery match { + case s: SqlSelect if s.orders.nonEmpty && s.offset.isEmpty => s.copy(offset = 0.some) + case _ => subquery + } + + def defaultOffsetForLimit(limit: Option[Int]): Option[Int] = + limit.as(0) + + def orderToFragment(col: Fragment, ascending: Boolean, nullsLast: Boolean): Fragment = { + val dir = if(ascending) Fragments.empty else Fragments.const(" DESC") + val nulls = + if(nullsLast && ascending) + Fragments.const(" CASE WHEN ") |+| col |+| Fragments.const(" IS NULL THEN 1 ELSE 0 END ASC, ") + else if(!nullsLast && !ascending) + Fragments.const(" CASE WHEN ") |+| col |+| Fragments.const(" IS NULL THEN 0 ELSE 1 END DESC, ") + else + Fragments.empty + + nulls |+| col |+| dir + } + + def nullsHigh: Boolean = false +} diff --git a/modules/doobie-mssql/src/test/resources/scripts/entrypoint.sh b/modules/doobie-mssql/src/test/resources/scripts/entrypoint.sh new file mode 100755 index 00000000..725b55a2 --- /dev/null +++ b/modules/doobie-mssql/src/test/resources/scripts/entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Start SQL Server +/opt/mssql/bin/sqlservr & + +# Wait for SQL Server to start (max 90 seconds) +for i in {1..90}; do + /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P Test_123_Test -No -Q 'SELECT 1' &> /dev/null + if [ $? -eq 0 ]; then + echo "SQL Server is up" + break + fi + echo "Waiting for SQL Server to start..." + sleep 1 +done + +# Initialize the database +if [ ! -f /tmp/healthy ]; then + echo "Intializing the database ..." + /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P Test_123_Test -No \ + -i <(cat /container-entrypoint-initdb.d/init.sql /grackle-initdb.d/*.sql) + + /bin/touch /tmp/healthy + + echo "Database initialized" +fi + +# Keep the container running +tail -f /dev/null diff --git a/modules/doobie-mssql/src/test/resources/scripts/init.sql b/modules/doobie-mssql/src/test/resources/scripts/init.sql new file mode 100644 index 00000000..c1302036 --- /dev/null +++ b/modules/doobie-mssql/src/test/resources/scripts/init.sql @@ -0,0 +1,9 @@ +USE master; +GO + +CREATE DATABASE test + COLLATE Latin1_General_100_CI_AS_SC_UTF8; +GO + +USE test; +GO diff --git a/modules/doobie-mssql/src/test/scala/DoobieMSSqlDatabaseSuite.scala b/modules/doobie-mssql/src/test/scala/DoobieMSSqlDatabaseSuite.scala new file mode 100644 index 00000000..5e3fb377 --- /dev/null +++ b/modules/doobie-mssql/src/test/scala/DoobieMSSqlDatabaseSuite.scala @@ -0,0 +1,105 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.mssql +package test + +import java.sql.{Time, Timestamp} +import java.time.{LocalDate, LocalTime, OffsetDateTime, ZoneId} +import java.util.UUID +import scala.util.Try + +import cats.effect.{Resource, Sync, IO} +import cats.syntax.all._ +import doobie.{Meta, Transactor} +import doobie.enumerated.JdbcType +import doobie.util.meta.MetaConstructors.Basic +import io.circe.{Decoder => CDecoder, Encoder => CEncoder, Json} +import io.circe.syntax._ +import io.circe.parser.parse +import munit.catseffect._ + +import grackle.doobie.DoobieMonitor +import grackle.doobie.test.DoobieDatabaseSuite + +import grackle.sql.test._ + +trait DoobieMSSqlDatabaseSuite extends DoobieDatabaseSuite { + abstract class DoobieMSSqlTestMapping[F[_]: Sync](transactor: Transactor[F], monitor: DoobieMonitor[F] = DoobieMonitor.noopMonitor[IO]) + extends DoobieMSSqlMapping[F](transactor, monitor) with DoobieTestMapping[F] with SqlTestMapping[F] { + def mkTestCodec[T](meta: Meta[T]): TestCodec[T] = (meta, false) + + val uuid: TestCodec[UUID] = + mkTestCodec(Meta[String].tiemap(s => Try(UUID.fromString(s)).toEither.leftMap(_.getMessage))(_.toString)) + + val localTime: TestCodec[LocalTime] = { + mkTestCodec(Meta[Time].timap(t => LocalTime.ofNanoOfDay(t.toLocalTime.toNanoOfDay))(lt => Time.valueOf(lt))) + } + + val localDate: TestCodec[LocalDate] = + (Basic.oneObject(JdbcType.Date, None, classOf[LocalDate]), false) + + // Forget precise time zone for compatibility with Postgres. Nb. this is specific to this test suite. + val offsetDateTime: TestCodec[OffsetDateTime] = + mkTestCodec(Meta[Timestamp].timap(t => OffsetDateTime.ofInstant(t.toInstant, ZoneId.of("UTC")))(o => Timestamp.from(o.toInstant))) + + val nvarchar: TestCodec[String] = mkTestCodec(Meta[String]) + + val jsonb: TestCodec[Json] = + mkTestCodec(Meta[String].tiemap(s => parse(s).leftMap(_.getMessage))(_.noSpaces)) + + override def list[T: CDecoder : CEncoder](c: TestCodec[T]): TestCodec[List[T]] = { + def put(ts: List[T]): String = ts.asJson.noSpaces + def get(s: String): Either[String, List[T]] = parse(s).map(_.as[List[T]].toOption.get).leftMap(_.getMessage) + + mkTestCodec(Meta[String].tiemap(get)(put)) + } + } + + case class MSSqlConnectionInfo(host: String, port: Int) { + val driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver" + val databaseName = "test" + val username = "sa" + val password = "Test_123_Test" + val jdbcUrl = s"jdbc:sqlserver://$host:$port;databaseName=$databaseName;user=$username;password=$password;trustServerCertificate=true;sendTimeAsDatetime=false;" + } + + object MSSqlConnectionInfo { + val DefaultPort = 1433 + } + + val msSqlConnectionInfo: MSSqlConnectionInfo = + MSSqlConnectionInfo("localhost", MSSqlConnectionInfo.DefaultPort) + + def transactorResource: Resource[IO, Transactor[IO]] = { + val connInfo = msSqlConnectionInfo + import connInfo._ + + val props = new java.util.Properties() + Resource.pure( + Transactor.fromDriverManager[IO]( + driverClassName, + jdbcUrl, + props, + None + ) + ) + } + + val transactorFixture: IOFixture[Transactor[IO]] = ResourceSuiteLocalFixture("mssqlpg", transactorResource) + override def munitFixtures: Seq[IOFixture[_]] = Seq(transactorFixture) + + def transactor: Transactor[IO] = transactorFixture() +} diff --git a/modules/doobie-mssql/src/test/scala/DoobieMSSqlSuites.scala b/modules/doobie-mssql/src/test/scala/DoobieMSSqlSuites.scala new file mode 100644 index 00000000..d7dba154 --- /dev/null +++ b/modules/doobie-mssql/src/test/scala/DoobieMSSqlSuites.scala @@ -0,0 +1,233 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.mssql +package test + +import cats.effect.{IO, Resource} +import doobie.{Meta, Transactor} +import doobie.implicits._ +import munit.catseffect.IOFixture + +import grackle.doobie.DoobieMonitor +import grackle.sql.SqlStatsMonitor + +import grackle.Mapping +import grackle.sql.test._ + +final class ArrayJoinSuite extends DoobieMSSqlDatabaseSuite with SqlArrayJoinSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlArrayJoinMapping[IO] +} + +final class CoalesceSuite extends DoobieMSSqlDatabaseSuite with SqlCoalesceSuite { + type Fragment = doobie.Fragment + def mapping: IO[(Mapping[IO], SqlStatsMonitor[IO,Fragment])] = + DoobieMonitor.statsMonitor[IO].map(mon => (new DoobieMSSqlTestMapping(transactor, mon) with SqlCoalesceMapping[IO], mon)) +} + +final class ComposedWorldSuite extends DoobieMSSqlDatabaseSuite with SqlComposedWorldSuite { + def mapping: IO[(CurrencyMapping[IO], Mapping[IO])] = + for { + currencyMapping <- CurrencyMapping[IO] + } yield (currencyMapping, new SqlComposedMapping(new DoobieMSSqlTestMapping(transactor) with SqlWorldMapping[IO], currencyMapping)) +} + +final class CompositeKeySuite extends DoobieMSSqlDatabaseSuite with SqlCompositeKeySuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlCompositeKeyMapping[IO] +} + +final class CursorJsonSuite extends DoobieMSSqlDatabaseSuite with SqlCursorJsonSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlCursorJsonMapping[IO] +} + +final class EmbeddingSuite extends DoobieMSSqlDatabaseSuite with SqlEmbeddingSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlEmbeddingMapping[IO] +} + +final class Embedding2Suite extends DoobieMSSqlDatabaseSuite with SqlEmbedding2Suite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlEmbedding2Mapping[IO] +} + +final class Embedding3Suite extends DoobieMSSqlDatabaseSuite with SqlEmbedding3Suite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlEmbedding3Mapping[IO] +} + +final class FilterJoinAliasSuite extends DoobieMSSqlDatabaseSuite with SqlFilterJoinAliasSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlFilterJoinAliasMapping[IO] +} + +final class FilterOrderOffsetLimitSuite extends DoobieMSSqlDatabaseSuite with SqlFilterOrderOffsetLimitSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlFilterOrderOffsetLimitMapping[IO] +} + +final class FilterOrderOffsetLimit2Suite extends DoobieMSSqlDatabaseSuite with SqlFilterOrderOffsetLimit2Suite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlFilterOrderOffsetLimit2Mapping[IO] +} + +final class GraphSuite extends DoobieMSSqlDatabaseSuite with SqlGraphSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlGraphMapping[IO] +} + +final class InterfacesSuite extends DoobieMSSqlDatabaseSuite with SqlInterfacesSuite { + lazy val mapping = + new DoobieMSSqlTestMapping(transactor) with SqlInterfacesMapping[IO] { + def entityType: TestCodec[EntityType] = + (Meta[Int].timap(EntityType.fromInt)(EntityType.toInt), false) + } +} + +final class InterfacesSuite2 extends DoobieMSSqlDatabaseSuite with SqlInterfacesSuite2 { + lazy val mapping = + new DoobieMSSqlTestMapping(transactor) with SqlInterfacesMapping2[IO] { + def entityType: TestCodec[EntityType] = + (Meta[Int].timap(EntityType.fromInt)(EntityType.toInt), false) + } +} + +final class JsonbSuite extends DoobieMSSqlDatabaseSuite with SqlJsonbSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlJsonbMapping[IO] +} + +final class LikeSuite extends DoobieMSSqlDatabaseSuite with SqlLikeSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlLikeMapping[IO] +} + +final class MappingValidatorValidSuite extends DoobieMSSqlDatabaseSuite with SqlMappingValidatorValidSuite { + // no DB instance needed for this suite + lazy val mapping = new DoobieMSSqlTestMapping(null) with SqlMappingValidatorValidMapping[IO] { + def genre: TestCodec[Genre] = (Meta[Int].imap(Genre.fromInt)(Genre.toInt), false) + def feature: TestCodec[Feature] = (Meta[String].imap(Feature.fromString)(_.toString), false) + } + override def munitFixtures: Seq[IOFixture[_]] = Nil +} + +final class MappingValidatorInvalidSuite extends DoobieMSSqlDatabaseSuite with SqlMappingValidatorInvalidSuite { + // no DB instance needed for this suite + lazy val mapping = new DoobieMSSqlTestMapping(null) with SqlMappingValidatorInvalidMapping[IO] + override def munitFixtures: Seq[IOFixture[_]] = Nil +} + +final class MixedSuite extends DoobieMSSqlDatabaseSuite with SqlMixedSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlMixedMapping[IO] +} + +final class MovieSuite extends DoobieMSSqlDatabaseSuite with SqlMovieSuite { + lazy val mapping = + new DoobieMSSqlTestMapping(transactor) with SqlMovieMapping[IO] { + def genre: TestCodec[Genre] = (Meta[Int].imap(Genre.fromInt)(Genre.toInt), false) + def feature: TestCodec[Feature] = (Meta[String].imap(Feature.fromString)(_.toString), false) + def tagList: TestCodec[List[String]] = (Meta[Int].imap(Tags.fromInt)(Tags.toInt), false) + } +} + +final class MutationSuite extends DoobieMSSqlDatabaseSuite with SqlMutationSuite { + // A resource that copies and drops the table used in the tests. + def withDuplicatedTables(transactor: Transactor[IO]): Resource[IO, Transactor[IO]] = { + val alloc = sql"SELECT * INTO city_copy FROM city".update.run.transact(transactor).as(transactor) + val free = sql"DROP TABLE city_copy".update.run.transact(transactor).void + Resource.make(alloc)(_ => free) + } + + override def transactorResource: Resource[IO, Transactor[IO]] = + super.transactorResource.flatMap(withDuplicatedTables) + + lazy val mapping = + new DoobieMSSqlTestMapping(transactor) with SqlMutationMapping[IO] { + def updatePopulation(id: Int, population: Int): IO[Unit] = + sql"UPDATE city_copy SET population=$population WHERE id=$id" + .update + .run + .transact(transactor) + .as(()) + + def createCity(name: String, countryCode: String, population: Int): IO[Int] = + sql""" + INSERT INTO city_copy (id, name, countrycode, district, population) + OUTPUT INSERTED.ID + VALUES (NEXT VALUE FOR city_id, $name, $countryCode, 'ignored', $population) + """ + .query[Int] + .unique + .transact(transactor) + } +} + +final class NestedEffectsSuite extends DoobieMSSqlDatabaseSuite with SqlNestedEffectsSuite { + def mapping: IO[(CurrencyService[IO], Mapping[IO])] = + for { + currencyService0 <- CurrencyService[IO] + } yield { + val mapping = + new DoobieMSSqlTestMapping(transactor) with SqlNestedEffectsMapping[IO] { + lazy val currencyService = currencyService0 + } + (currencyService0, mapping) + } +} + +final class Paging1Suite extends DoobieMSSqlDatabaseSuite with SqlPaging1Suite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlPaging1Mapping[IO] +} + +final class Paging2Suite extends DoobieMSSqlDatabaseSuite with SqlPaging2Suite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlPaging2Mapping[IO] +} + +final class Paging3Suite extends DoobieMSSqlDatabaseSuite with SqlPaging3Suite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlPaging3Mapping[IO] +} + +final class ProjectionSuite extends DoobieMSSqlDatabaseSuite with SqlProjectionSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlProjectionMapping[IO] +} + +final class RecursiveInterfacesSuite extends DoobieMSSqlDatabaseSuite with SqlRecursiveInterfacesSuite { + lazy val mapping = + new DoobieMSSqlTestMapping(transactor) with SqlRecursiveInterfacesMapping[IO] { + def itemType: TestCodec[ItemType] = + (Meta[Int].timap(ItemType.fromInt)(ItemType.toInt), false) + } +} + +final class SiblingListsSuite extends DoobieMSSqlDatabaseSuite with SqlSiblingListsSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlSiblingListsData[IO] +} + +final class TreeSuite extends DoobieMSSqlDatabaseSuite with SqlTreeSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlTreeMapping[IO] +} + +final class UnionsSuite extends DoobieMSSqlDatabaseSuite with SqlUnionSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlUnionsMapping[IO] +} + +final class WorldSuite extends DoobieMSSqlDatabaseSuite with SqlWorldSuite { + lazy val mapping = new DoobieMSSqlTestMapping(transactor) with SqlWorldMapping[IO] +} + +final class WorldCompilerSuite extends DoobieMSSqlDatabaseSuite with SqlWorldCompilerSuite { + type Fragment = doobie.Fragment + + def mapping: IO[(Mapping[IO], SqlStatsMonitor[IO,Fragment])] = + DoobieMonitor.statsMonitor[IO].map(mon => (new DoobieMSSqlTestMapping(transactor, mon) with SqlWorldMapping[IO], mon)) + + def simpleRestrictedQuerySql: String = + "SELECT country.code , country.name FROM country WHERE (( country.code = ?) )" + + def simpleFilteredQuerySql: String = + "SELECT city.id , city.name FROM city WHERE (UPPER( city.name ) LIKE ?)" + + def filterArg: String = "LINH%" +} diff --git a/modules/doobie-oracle/src/main/scala/DoobieOracleMapping.scala b/modules/doobie-oracle/src/main/scala/DoobieOracleMapping.scala new file mode 100644 index 00000000..348fef8d --- /dev/null +++ b/modules/doobie-oracle/src/main/scala/DoobieOracleMapping.scala @@ -0,0 +1,98 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.oracle + +import cats.effect.Sync +import cats.syntax.all._ +import _root_.doobie.Transactor + +import grackle.Mapping +import grackle.Query.OrderSelection +import grackle.doobie._ +import grackle.sql._ + +abstract class DoobieOracleMapping[F[_]]( + val transactor: Transactor[F], + val monitor: DoobieMonitor[F], +)( + implicit val M: Sync[F] +) extends Mapping[F] with DoobieOracleMappingLike[F] + +trait DoobieOracleMappingLike[F[_]] extends DoobieMappingLike[F] with SqlMappingLike[F] { + import SqlQuery.SqlSelect + import TableExpr.Laterality + + def collateToFragment: Fragment = + Fragments.const(" COLLATE \"binary\"") + + def aliasDefToFragment(alias: String): Fragment = + Fragments.const(s" $alias") + + def offsetToFragment(offset: Fragment): Fragment = + Fragments.const(" OFFSET ") |+| offset |+| Fragments.const(" ROWS") + + def limitToFragment(limit: Fragment): Fragment = + Fragments.const(" FETCH FIRST ") |+| limit |+| Fragments.const(" ROWS ONLY") + + def likeToFragment(expr: Fragment, pattern: String, caseInsensitive: Boolean): Fragment = { + val casedExpr = if(caseInsensitive) Fragments.const("UPPER(") |+| expr |+| Fragments.const(s")") else expr + val casedPattern = if(caseInsensitive) pattern.toUpperCase else pattern + casedExpr |+| Fragments.const(s" LIKE ") |+| Fragments.bind(stringEncoder, casedPattern) + } + + def ascribedNullToFragment(codec: Codec): Fragment = + Fragments.sqlTypeName(codec) match { + case Some(name) if !name.startsWith("_") => + val convName = + name match { + case "VARCHAR" => "CHAR" + case "NVARCHAR" => "NCHAR" + case "INTEGER" => "NUMBER" + case "BIGINT" => "NUMBER" + case other => other + } + Fragments.const(s"TO_$convName(NULL)") + case _ => Fragments.const("NULL") + } + + def collateSelected: Boolean = false + + def distinctOnToFragment(dcols: List[Fragment]): Fragment = + Fragments.const("DISTINCT ") + + def distinctOrderColumn(owner: ColumnOwner, col: SqlColumn, predCols: List[SqlColumn], orders: List[OrderSelection[_]]): SqlColumn = + SqlColumn.FirstValueColumn(owner, col, predCols, orders) // TODO: check that passing orders works with Oracle + + def encapsulateUnionBranch(s: SqlSelect): SqlSelect = s + def mkLateral(inner: Boolean): Laterality = Laterality.Lateral + def defaultOffsetForSubquery(subquery: SqlQuery): SqlQuery = subquery + def defaultOffsetForLimit(limit: Option[Int]): Option[Int] = None + + def orderToFragment(col: Fragment, ascending: Boolean, nullsLast: Boolean): Fragment = { + val dir = if(ascending) Fragments.empty else Fragments.const(" DESC") + val nulls = + if(!nullsLast && ascending) + Fragments.const(" NULLS FIRST ") + else if(nullsLast && !ascending) + Fragments.const(" NULLS LAST ") + else + Fragments.empty + + col |+| dir |+| nulls + } + + def nullsHigh: Boolean = true +} diff --git a/modules/doobie-oracle/src/test/resources/scripts/01_create_user.sql b/modules/doobie-oracle/src/test/resources/scripts/01_create_user.sql new file mode 100644 index 00000000..15da74de --- /dev/null +++ b/modules/doobie-oracle/src/test/resources/scripts/01_create_user.sql @@ -0,0 +1,5 @@ +ALTER SESSION SET CONTAINER=FREEPDB1; + +CREATE USER TEST IDENTIFIED BY test QUOTA UNLIMITED ON USERS; + +GRANT CONNECT, RESOURCE TO TEST; diff --git a/modules/doobie-oracle/src/test/resources/scripts/02_create_tables.sh b/modules/doobie-oracle/src/test/resources/scripts/02_create_tables.sh new file mode 100755 index 00000000..f35df496 --- /dev/null +++ b/modules/doobie-oracle/src/test/resources/scripts/02_create_tables.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ ! -f /tmp/healthy ]; then + echo "Intializing the database ..." + sqlplus -s test/test@//localhost/FREEPDB1 < <(cat /grackle-initdb.d/*.sql) + + /bin/touch /tmp/healthy + + echo "Database initialized" +fi diff --git a/modules/doobie-oracle/src/test/scala/DoobieOracleDatabaseSuite.scala b/modules/doobie-oracle/src/test/scala/DoobieOracleDatabaseSuite.scala new file mode 100644 index 00000000..9b36d4bb --- /dev/null +++ b/modules/doobie-oracle/src/test/scala/DoobieOracleDatabaseSuite.scala @@ -0,0 +1,117 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.oracle +package test + +import java.sql.Timestamp +import java.time.{LocalDate, LocalTime, OffsetDateTime, ZoneId} +import java.time.format.DateTimeFormatter +import java.util.UUID +import scala.util.Try + +import cats.data.NonEmptyList +import cats.effect.{Resource, Sync, IO} +import cats.syntax.all._ +import doobie.{Meta, Transactor} +import doobie.enumerated.JdbcType +import doobie.util.Put +import doobie.util.meta.MetaConstructors.Basic +import io.circe.Json +import io.circe.parser.parse +import munit.catseffect._ + +import grackle.doobie.DoobieMonitor +import grackle.doobie.test.DoobieDatabaseSuite + +import grackle.sql.test._ + +trait DoobieOracleDatabaseSuite extends DoobieDatabaseSuite { + abstract class DoobieOracleTestMapping[F[_]: Sync](transactor: Transactor[F], monitor: DoobieMonitor[F] = DoobieMonitor.noopMonitor[IO]) + extends DoobieOracleMapping[F](transactor, monitor) with DoobieTestMapping[F] with SqlTestMapping[F] { + def mkTestCodec[T](meta: Meta[T]): TestCodec[T] = (meta, false) + + val uuid: TestCodec[UUID] = + mkTestCodec(Meta[String].tiemap(s => Try(UUID.fromString(s)).toEither.leftMap(_.getMessage))(_.toString)) + + val localTime: TestCodec[LocalTime] = { // TODO: Try Meta[java.sql.Time] + val localTimeFormat: DateTimeFormatter = DateTimeFormatter.ofPattern("0 H:m:s.S") + mkTestCodec(Meta[String].tiemap(s => Try(LocalTime.parse(s, localTimeFormat)).toEither.leftMap(_.getMessage))(_.format(localTimeFormat))) + } + + val localDate: TestCodec[LocalDate] = + (Basic.oneObject(JdbcType.Date, None, classOf[LocalDate]), false) + + // Forget precise time zone for compatibility with Postgres. Nb. this is specific to this test suite. + val offsetDateTime: TestCodec[OffsetDateTime] = + mkTestCodec(Meta[Timestamp].timap(t => OffsetDateTime.ofInstant(t.toInstant, ZoneId.of("UTC")))(o => Timestamp.from(o.toInstant))) + + val nvarchar: TestCodec[String] = { + val nvarcharMeta: Meta[String] = { + import JdbcType._ + val oldGet = Meta[String].get + val oldPut = Meta[String].put + val newTargets = NonEmptyList.of(NChar, NVarChar, LongnVarChar) + val newPut = + Put.Basic(oldPut.typeStack, newTargets, oldPut.put, oldPut.update, oldPut.vendorTypeNames.headOption) + + new Meta[String](oldGet, newPut) + } + + mkTestCodec(nvarcharMeta) + } + + val jsonb: TestCodec[Json] = + mkTestCodec(Meta[String].tiemap(s => parse(s).leftMap(_.getMessage))(_.noSpaces)) + } + + case class OracleConnectionInfo(host: String, port: Int) { + val driverClassName = "oracle.jdbc.driver.OracleDriver" + val databaseName = "FREEPDB1" + val jdbcUrl = s"jdbc:oracle:thin:@//$host:$port/$databaseName" + val username = "test" + val password = "test" + } + + object OracleConnectionInfo { + val DefaultPort = 1521 + } + + val oracleConnectionInfo: OracleConnectionInfo = + OracleConnectionInfo("localhost", OracleConnectionInfo.DefaultPort) + + def transactorResource: Resource[IO, Transactor[IO]] = { + val connInfo = oracleConnectionInfo + import connInfo._ + + val props = new java.util.Properties() + props.setProperty("user", username) + props.setProperty("password", password) + props.setProperty("oracle.jdbc.jsonDefaultGetObjectType", "java.lang.String") + Resource.pure( + Transactor.fromDriverManager[IO]( + driverClassName, + jdbcUrl, + props, + None + ) + ) + } + + val transactorFixture: IOFixture[Transactor[IO]] = ResourceSuiteLocalFixture("oraclepg", transactorResource) + override def munitFixtures: Seq[IOFixture[_]] = Seq(transactorFixture) + + def transactor: Transactor[IO] = transactorFixture() +} diff --git a/modules/doobie-oracle/src/test/scala/DoobieOracleSuites.scala b/modules/doobie-oracle/src/test/scala/DoobieOracleSuites.scala new file mode 100644 index 00000000..8fa1383f --- /dev/null +++ b/modules/doobie-oracle/src/test/scala/DoobieOracleSuites.scala @@ -0,0 +1,232 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.oracle +package test + +import cats.effect.{IO, Resource} +import doobie.{Meta, Transactor} +import doobie.implicits._ +import munit.catseffect.IOFixture + +import grackle.doobie.DoobieMonitor +import grackle.sql.SqlStatsMonitor + +import grackle.Mapping +import grackle.sql.test._ + +final class ArrayJoinSuite extends DoobieOracleDatabaseSuite with SqlArrayJoinSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlArrayJoinMapping[IO] +} + +final class CoalesceSuite extends DoobieOracleDatabaseSuite with SqlCoalesceSuite { + type Fragment = doobie.Fragment + def mapping: IO[(Mapping[IO], SqlStatsMonitor[IO,Fragment])] = + DoobieMonitor.statsMonitor[IO].map(mon => (new DoobieOracleTestMapping(transactor, mon) with SqlCoalesceMapping[IO], mon)) +} + +final class ComposedWorldSuite extends DoobieOracleDatabaseSuite with SqlComposedWorldSuite { + def mapping: IO[(CurrencyMapping[IO], Mapping[IO])] = + for { + currencyMapping <- CurrencyMapping[IO] + } yield (currencyMapping, new SqlComposedMapping(new DoobieOracleTestMapping(transactor) with SqlWorldMapping[IO], currencyMapping)) +} + +final class CompositeKeySuite extends DoobieOracleDatabaseSuite with SqlCompositeKeySuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlCompositeKeyMapping[IO] +} + +final class CursorJsonSuite extends DoobieOracleDatabaseSuite with SqlCursorJsonSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlCursorJsonMapping[IO] +} + +final class EmbeddingSuite extends DoobieOracleDatabaseSuite with SqlEmbeddingSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlEmbeddingMapping[IO] +} + +final class Embedding2Suite extends DoobieOracleDatabaseSuite with SqlEmbedding2Suite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlEmbedding2Mapping[IO] +} + +final class Embedding3Suite extends DoobieOracleDatabaseSuite with SqlEmbedding3Suite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlEmbedding3Mapping[IO] +} + +final class FilterJoinAliasSuite extends DoobieOracleDatabaseSuite with SqlFilterJoinAliasSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlFilterJoinAliasMapping[IO] +} + +final class FilterOrderOffsetLimitSuite extends DoobieOracleDatabaseSuite with SqlFilterOrderOffsetLimitSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlFilterOrderOffsetLimitMapping[IO] +} + +final class FilterOrderOffsetLimit2Suite extends DoobieOracleDatabaseSuite with SqlFilterOrderOffsetLimit2Suite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlFilterOrderOffsetLimit2Mapping[IO] +} + +final class GraphSuite extends DoobieOracleDatabaseSuite with SqlGraphSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlGraphMapping[IO] +} + +final class InterfacesSuite extends DoobieOracleDatabaseSuite with SqlInterfacesSuite { + lazy val mapping = + new DoobieOracleTestMapping(transactor) with SqlInterfacesMapping[IO] { + def entityType: TestCodec[EntityType] = + (Meta[Int].timap(EntityType.fromInt)(EntityType.toInt), false) + } +} + +final class InterfacesSuite2 extends DoobieOracleDatabaseSuite with SqlInterfacesSuite2 { + lazy val mapping = + new DoobieOracleTestMapping(transactor) with SqlInterfacesMapping2[IO] { + def entityType: TestCodec[EntityType] = + (Meta[Int].timap(EntityType.fromInt)(EntityType.toInt), false) + } +} + +final class JsonbSuite extends DoobieOracleDatabaseSuite with SqlJsonbSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlJsonbMapping[IO] +} + +final class LikeSuite extends DoobieOracleDatabaseSuite with SqlLikeSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlLikeMapping[IO] +} + +final class MappingValidatorValidSuite extends DoobieOracleDatabaseSuite with SqlMappingValidatorValidSuite { + // no DB instance needed for this suite + lazy val mapping = new DoobieOracleTestMapping(null) with SqlMappingValidatorValidMapping[IO] { + def genre: TestCodec[Genre] = (Meta[Int].imap(Genre.fromInt)(Genre.toInt), false) + def feature: TestCodec[Feature] = (Meta[String].imap(Feature.fromString)(_.toString), false) + } + override def munitFixtures: Seq[IOFixture[_]] = Nil +} + +final class MappingValidatorInvalidSuite extends DoobieOracleDatabaseSuite with SqlMappingValidatorInvalidSuite { + // no DB instance needed for this suite + lazy val mapping = new DoobieOracleTestMapping(null) with SqlMappingValidatorInvalidMapping[IO] + override def munitFixtures: Seq[IOFixture[_]] = Nil +} + +final class MixedSuite extends DoobieOracleDatabaseSuite with SqlMixedSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlMixedMapping[IO] +} + +final class MovieSuite extends DoobieOracleDatabaseSuite with SqlMovieSuite { + lazy val mapping = + new DoobieOracleTestMapping(transactor) with SqlMovieMapping[IO] { + def genre: TestCodec[Genre] = (Meta[Int].imap(Genre.fromInt)(Genre.toInt), false) + def feature: TestCodec[Feature] = (Meta[String].imap(Feature.fromString)(_.toString), false) + def tagList: TestCodec[List[String]] = (Meta[Int].imap(Tags.fromInt)(Tags.toInt), false) + } +} + +final class MutationSuite extends DoobieOracleDatabaseSuite with SqlMutationSuite { + // A resource that copies and drops the table used in the tests. + def withDuplicatedTables(transactor: Transactor[IO]): Resource[IO, Transactor[IO]] = { + val alloc = sql"CREATE TABLE city_copy AS SELECT * FROM city".update.run.transact(transactor).as(transactor) + val free = sql"DROP TABLE city_copy".update.run.transact(transactor).void + Resource.make(alloc)(_ => free) + } + + override def transactorResource: Resource[IO, Transactor[IO]] = + super.transactorResource.flatMap(withDuplicatedTables) + + lazy val mapping = + new DoobieOracleTestMapping(transactor) with SqlMutationMapping[IO] { + def updatePopulation(id: Int, population: Int): IO[Unit] = + sql"UPDATE city_copy SET population=$population WHERE id=$id" + .update + .run + .transact(transactor) + .as(()) + + def createCity(name: String, countryCode: String, population: Int): IO[Int] = + sql""" + INSERT INTO city_copy (id, name, countrycode, district, population) + VALUES (city_id.nextval, $name, $countryCode, 'ignored', $population) + """ + .update + .withUniqueGeneratedKeys[Int]("id") + .transact(transactor) + } +} + +final class NestedEffectsSuite extends DoobieOracleDatabaseSuite with SqlNestedEffectsSuite { + def mapping: IO[(CurrencyService[IO], Mapping[IO])] = + for { + currencyService0 <- CurrencyService[IO] + } yield { + val mapping = + new DoobieOracleTestMapping(transactor) with SqlNestedEffectsMapping[IO] { + lazy val currencyService = currencyService0 + } + (currencyService0, mapping) + } +} + +final class Paging1Suite extends DoobieOracleDatabaseSuite with SqlPaging1Suite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlPaging1Mapping[IO] +} + +final class Paging2Suite extends DoobieOracleDatabaseSuite with SqlPaging2Suite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlPaging2Mapping[IO] +} + +final class Paging3Suite extends DoobieOracleDatabaseSuite with SqlPaging3Suite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlPaging3Mapping[IO] +} + +final class ProjectionSuite extends DoobieOracleDatabaseSuite with SqlProjectionSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlProjectionMapping[IO] +} + +final class RecursiveInterfacesSuite extends DoobieOracleDatabaseSuite with SqlRecursiveInterfacesSuite { + lazy val mapping = + new DoobieOracleTestMapping(transactor) with SqlRecursiveInterfacesMapping[IO] { + def itemType: TestCodec[ItemType] = + (Meta[Int].timap(ItemType.fromInt)(ItemType.toInt), false) + } +} + +final class SiblingListsSuite extends DoobieOracleDatabaseSuite with SqlSiblingListsSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlSiblingListsData[IO] +} + +final class TreeSuite extends DoobieOracleDatabaseSuite with SqlTreeSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlTreeMapping[IO] +} + +final class UnionsSuite extends DoobieOracleDatabaseSuite with SqlUnionSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlUnionsMapping[IO] +} + +final class WorldSuite extends DoobieOracleDatabaseSuite with SqlWorldSuite { + lazy val mapping = new DoobieOracleTestMapping(transactor) with SqlWorldMapping[IO] +} + +final class WorldCompilerSuite extends DoobieOracleDatabaseSuite with SqlWorldCompilerSuite { + type Fragment = doobie.Fragment + + def mapping: IO[(Mapping[IO], SqlStatsMonitor[IO,Fragment])] = + DoobieMonitor.statsMonitor[IO].map(mon => (new DoobieOracleTestMapping(transactor, mon) with SqlWorldMapping[IO], mon)) + + def simpleRestrictedQuerySql: String = + "SELECT country.code , country.name FROM country WHERE (( country.code = ?) )" + + def simpleFilteredQuerySql: String = + "SELECT city.id , city.name FROM city WHERE (UPPER( city.name ) LIKE ?)" + + def filterArg: String = "LINH%" +} diff --git a/modules/doobie-pg/src/main/scala/DoobiePgMapping.scala b/modules/doobie-pg/src/main/scala/DoobiePgMapping.scala new file mode 100644 index 00000000..8d4c2b15 --- /dev/null +++ b/modules/doobie-pg/src/main/scala/DoobiePgMapping.scala @@ -0,0 +1,32 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.postgres + +import cats.effect.Sync +import _root_.doobie.Transactor + +import grackle.Mapping +import grackle.doobie._ +import grackle.sqlpg._ + +abstract class DoobiePgMapping[F[_]]( + val transactor: Transactor[F], + val monitor: DoobieMonitor[F], +)( + implicit val M: Sync[F] +) extends Mapping[F] with DoobiePgMappingLike[F] + +trait DoobiePgMappingLike[F[_]] extends DoobieMappingLike[F] with SqlPgMappingLike[F] diff --git a/modules/doobie-pg/src/test/scala/DoobiePgDatabaseSuite.scala b/modules/doobie-pg/src/test/scala/DoobiePgDatabaseSuite.scala new file mode 100644 index 00000000..9f5ed80b --- /dev/null +++ b/modules/doobie-pg/src/test/scala/DoobiePgDatabaseSuite.scala @@ -0,0 +1,64 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.postgres +package test + +import java.time.{LocalDate, LocalTime, OffsetDateTime} +import java.util.UUID + +import cats.effect.{IO, Resource, Sync} +import doobie.{Get, Meta, Put, Transactor} +import doobie.postgres.implicits._ +import doobie.postgres.circe.jsonb.implicits._ +import io.circe.Json +import munit.catseffect.IOFixture + +import grackle.doobie.DoobieMonitor +import grackle.doobie.test.DoobieDatabaseSuite +import grackle.sql.test._ +import grackle.sqlpg.test._ + +trait DoobiePgDatabaseSuite extends DoobieDatabaseSuite with SqlPgDatabaseSuite { + abstract class DoobiePgTestMapping[F[_]: Sync](transactor: Transactor[F], monitor: DoobieMonitor[F] = DoobieMonitor.noopMonitor[IO]) + extends DoobiePgMapping[F](transactor, monitor) with DoobieTestMapping[F] with SqlTestMapping[F] { + def uuid: TestCodec[UUID] = (Meta[UUID], false) + def localDate: TestCodec[LocalDate] = (Meta[LocalDate], false) + def localTime: TestCodec[LocalTime] = (Meta[LocalTime], false) + def offsetDateTime: TestCodec[OffsetDateTime] = (Meta[OffsetDateTime], false) + def jsonb: TestCodec[Json] = (new Meta(Get[Json], Put[Json]), false) + def nvarchar: TestCodec[String] = (Meta[String], false) + } + + def transactorResource: Resource[IO, Transactor[IO]] = { + val connInfo = postgresConnectionInfo + import connInfo._ + + Resource.pure( + Transactor.fromDriverManager[IO]( + driverClassName, + jdbcUrl, + username, + password, + None + ) + ) + } + + val transactorFixture: IOFixture[Transactor[IO]] = ResourceSuiteLocalFixture("doobiepg", transactorResource) + override def munitFixtures: Seq[IOFixture[_]] = Seq(transactorFixture) + + def transactor: Transactor[IO] = transactorFixture() +} diff --git a/modules/doobie-pg/src/test/scala/DoobiePgSuites.scala b/modules/doobie-pg/src/test/scala/DoobiePgSuites.scala new file mode 100644 index 00000000..983cdfc0 --- /dev/null +++ b/modules/doobie-pg/src/test/scala/DoobiePgSuites.scala @@ -0,0 +1,232 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.doobie.postgres +package test + +import cats.effect.{IO, Resource} +import doobie.{Meta, Transactor} +import doobie.implicits._ +import munit.catseffect.IOFixture + +import grackle.doobie.DoobieMonitor +import grackle.sql.SqlStatsMonitor + +import grackle.Mapping +import grackle.sql.test._ + +final class ArrayJoinSuite extends DoobiePgDatabaseSuite with SqlArrayJoinSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlArrayJoinMapping[IO] +} + +final class CoalesceSuite extends DoobiePgDatabaseSuite with SqlCoalesceSuite { + type Fragment = doobie.Fragment + def mapping: IO[(Mapping[IO], SqlStatsMonitor[IO,Fragment])] = + DoobieMonitor.statsMonitor[IO].map(mon => (new DoobiePgTestMapping(transactor, mon) with SqlCoalesceMapping[IO], mon)) +} + +final class ComposedWorldSuite extends DoobiePgDatabaseSuite with SqlComposedWorldSuite { + def mapping: IO[(CurrencyMapping[IO], Mapping[IO])] = + for { + currencyMapping <- CurrencyMapping[IO] + } yield (currencyMapping, new SqlComposedMapping(new DoobiePgTestMapping(transactor) with SqlWorldMapping[IO], currencyMapping)) +} + +final class CompositeKeySuite extends DoobiePgDatabaseSuite with SqlCompositeKeySuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlCompositeKeyMapping[IO] +} + +final class CursorJsonSuite extends DoobiePgDatabaseSuite with SqlCursorJsonSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlCursorJsonMapping[IO] +} + +final class EmbeddingSuite extends DoobiePgDatabaseSuite with SqlEmbeddingSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlEmbeddingMapping[IO] +} + +final class Embedding2Suite extends DoobiePgDatabaseSuite with SqlEmbedding2Suite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlEmbedding2Mapping[IO] +} + +final class Embedding3Suite extends DoobiePgDatabaseSuite with SqlEmbedding3Suite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlEmbedding3Mapping[IO] +} + +final class FilterJoinAliasSuite extends DoobiePgDatabaseSuite with SqlFilterJoinAliasSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlFilterJoinAliasMapping[IO] +} + +final class FilterOrderOffsetLimitSuite extends DoobiePgDatabaseSuite with SqlFilterOrderOffsetLimitSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlFilterOrderOffsetLimitMapping[IO] +} + +final class FilterOrderOffsetLimit2Suite extends DoobiePgDatabaseSuite with SqlFilterOrderOffsetLimit2Suite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlFilterOrderOffsetLimit2Mapping[IO] +} + +final class GraphSuite extends DoobiePgDatabaseSuite with SqlGraphSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlGraphMapping[IO] +} + +final class InterfacesSuite extends DoobiePgDatabaseSuite with SqlInterfacesSuite { + lazy val mapping = + new DoobiePgTestMapping(transactor) with SqlInterfacesMapping[IO] { + def entityType: TestCodec[EntityType] = + (Meta[Int].timap(EntityType.fromInt)(EntityType.toInt), false) + } +} + +final class InterfacesSuite2 extends DoobiePgDatabaseSuite with SqlInterfacesSuite2 { + lazy val mapping = + new DoobiePgTestMapping(transactor) with SqlInterfacesMapping2[IO] { + def entityType: TestCodec[EntityType] = + (Meta[Int].timap(EntityType.fromInt)(EntityType.toInt), false) + } +} + +final class JsonbSuite extends DoobiePgDatabaseSuite with SqlJsonbSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlJsonbMapping[IO] +} + +final class LikeSuite extends DoobiePgDatabaseSuite with SqlLikeSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlLikeMapping[IO] +} + +final class MappingValidatorValidSuite extends DoobiePgDatabaseSuite with SqlMappingValidatorValidSuite { + // no DB instance needed for this suite + lazy val mapping = new DoobiePgTestMapping(null) with SqlMappingValidatorValidMapping[IO] { + def genre: TestCodec[Genre] = (Meta[Int].imap(Genre.fromInt)(Genre.toInt), false) + def feature: TestCodec[Feature] = (Meta[String].imap(Feature.fromString)(_.toString), false) + } + override def munitFixtures: Seq[IOFixture[_]] = Nil +} + +final class MappingValidatorInvalidSuite extends DoobiePgDatabaseSuite with SqlMappingValidatorInvalidSuite { + // no DB instance needed for this suite + lazy val mapping = new DoobiePgTestMapping(null) with SqlMappingValidatorInvalidMapping[IO] + override def munitFixtures: Seq[IOFixture[_]] = Nil +} + +final class MixedSuite extends DoobiePgDatabaseSuite with SqlMixedSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlMixedMapping[IO] +} + +final class MovieSuite extends DoobiePgDatabaseSuite with SqlMovieSuite { + lazy val mapping = + new DoobiePgTestMapping(transactor) with SqlMovieMapping[IO] { + def genre: TestCodec[Genre] = (Meta[Int].imap(Genre.fromInt)(Genre.toInt), false) + def feature: TestCodec[Feature] = (Meta[String].imap(Feature.fromString)(_.toString), false) + def tagList: TestCodec[List[String]] = (Meta[Int].imap(Tags.fromInt)(Tags.toInt), false) + } +} + +final class MutationSuite extends DoobiePgDatabaseSuite with SqlMutationSuite { + // A resource that copies and drops the table used in the tests. + def withDuplicatedTables(transactor: Transactor[IO]): Resource[IO, Transactor[IO]] = { + val alloc = sql"CREATE TABLE city_copy AS SELECT * FROM city".update.run.transact(transactor).as(transactor) + val free = sql"DROP TABLE city_copy".update.run.transact(transactor).void + Resource.make(alloc)(_ => free) + } + + override def transactorResource: Resource[IO, Transactor[IO]] = + super.transactorResource.flatMap(withDuplicatedTables) + + lazy val mapping = + new DoobiePgTestMapping(transactor) with SqlMutationMapping[IO] { + def updatePopulation(id: Int, population: Int): IO[Unit] = + sql"UPDATE city_copy SET population=$population WHERE id=$id" + .update + .run + .transact(transactor) + .void + + def createCity(name: String, countryCode: String, population: Int): IO[Int] = + sql""" + INSERT INTO city_copy (id, name, countrycode, district, population) + VALUES (nextval('city_id'), $name, $countryCode, 'ignored', $population) + RETURNING id + """.query[Int] + .unique + .transact(transactor) + } +} + +final class NestedEffectsSuite extends DoobiePgDatabaseSuite with SqlNestedEffectsSuite { + def mapping: IO[(CurrencyService[IO], Mapping[IO])] = + for { + currencyService0 <- CurrencyService[IO] + } yield { + val mapping = + new DoobiePgTestMapping(transactor) with SqlNestedEffectsMapping[IO] { + lazy val currencyService = currencyService0 + } + (currencyService0, mapping) + } +} + +final class Paging1Suite extends DoobiePgDatabaseSuite with SqlPaging1Suite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlPaging1Mapping[IO] +} + +final class Paging2Suite extends DoobiePgDatabaseSuite with SqlPaging2Suite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlPaging2Mapping[IO] +} + +final class Paging3Suite extends DoobiePgDatabaseSuite with SqlPaging3Suite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlPaging3Mapping[IO] +} + +final class ProjectionSuite extends DoobiePgDatabaseSuite with SqlProjectionSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlProjectionMapping[IO] +} + +final class RecursiveInterfacesSuite extends DoobiePgDatabaseSuite with SqlRecursiveInterfacesSuite { + lazy val mapping = + new DoobiePgTestMapping(transactor) with SqlRecursiveInterfacesMapping[IO] { + def itemType: TestCodec[ItemType] = + (Meta[Int].timap(ItemType.fromInt)(ItemType.toInt), false) + } +} + +final class SiblingListsSuite extends DoobiePgDatabaseSuite with SqlSiblingListsSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlSiblingListsData[IO] +} + +final class TreeSuite extends DoobiePgDatabaseSuite with SqlTreeSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlTreeMapping[IO] +} + +final class UnionsSuite extends DoobiePgDatabaseSuite with SqlUnionSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlUnionsMapping[IO] +} + +final class WorldSuite extends DoobiePgDatabaseSuite with SqlWorldSuite { + lazy val mapping = new DoobiePgTestMapping(transactor) with SqlWorldMapping[IO] +} + +final class WorldCompilerSuite extends DoobiePgDatabaseSuite with SqlWorldCompilerSuite { + type Fragment = doobie.Fragment + + def mapping: IO[(Mapping[IO], SqlStatsMonitor[IO,Fragment])] = + DoobieMonitor.statsMonitor[IO].map(mon => (new DoobiePgTestMapping(transactor, mon) with SqlWorldMapping[IO], mon)) + + def simpleRestrictedQuerySql: String = + "SELECT country.code , country.name FROM country WHERE (( country.code = ?) )" + + def simpleFilteredQuerySql: String = + "SELECT city.id , city.name FROM city WHERE (city.name ILIKE ?)" + + def filterArg: String = "Linh%" +} diff --git a/modules/doobie-pg/src/test/scala/DoobieSuites.scala b/modules/doobie-pg/src/test/scala/DoobieSuites.scala deleted file mode 100644 index b6303f7a..00000000 --- a/modules/doobie-pg/src/test/scala/DoobieSuites.scala +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) -// Copyright (c) 2016-2023 Grackle Contributors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package grackle.doobie.test - -import cats.effect.IO -import doobie.implicits._ -import doobie.Meta -import munit.catseffect.IOFixture - - -import grackle.doobie.postgres.DoobieMonitor -import grackle.sql.SqlStatsMonitor - -import grackle.sql.test._ -import grackle.Mapping - -final class ArrayJoinSuite extends DoobieDatabaseSuite with SqlArrayJoinSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlArrayJoinMapping[IO] -} - -final class CoalesceSuite extends DoobieDatabaseSuite with SqlCoalesceSuite { - type Fragment = doobie.Fragment - def mapping: IO[(Mapping[IO], SqlStatsMonitor[IO,Fragment])] = - DoobieMonitor.statsMonitor[IO].map(mon => (new DoobieTestMapping(xa, mon) with SqlCoalesceMapping[IO], mon)) -} - -final class ComposedWorldSuite extends DoobieDatabaseSuite with SqlComposedWorldSuite { - def mapping: IO[(CurrencyMapping[IO], Mapping[IO])] = - for { - currencyMapping <- CurrencyMapping[IO] - } yield (currencyMapping, new SqlComposedMapping(new DoobieTestMapping(xa) with SqlWorldMapping[IO], currencyMapping)) -} - -final class CompositeKeySuite extends DoobieDatabaseSuite with SqlCompositeKeySuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlCompositeKeyMapping[IO] -} - -final class CursorJsonSuite extends DoobieDatabaseSuite with SqlCursorJsonSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlCursorJsonMapping[IO] -} - -final class EmbeddingSuite extends DoobieDatabaseSuite with SqlEmbeddingSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlEmbeddingMapping[IO] -} - -final class Embedding2Suite extends DoobieDatabaseSuite with SqlEmbedding2Suite { - lazy val mapping = new DoobieTestMapping(xa) with SqlEmbedding2Mapping[IO] -} - -final class Embedding3Suite extends DoobieDatabaseSuite with SqlEmbedding3Suite { - lazy val mapping = new DoobieTestMapping(xa) with SqlEmbedding3Mapping[IO] -} - -final class FilterJoinAliasSuite extends DoobieDatabaseSuite with SqlFilterJoinAliasSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlFilterJoinAliasMapping[IO] -} - -final class FilterOrderOffsetLimitSuite extends DoobieDatabaseSuite with SqlFilterOrderOffsetLimitSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlFilterOrderOffsetLimitMapping[IO] -} - -final class FilterOrderOffsetLimit2Suite extends DoobieDatabaseSuite with SqlFilterOrderOffsetLimit2Suite { - lazy val mapping = new DoobieTestMapping(xa) with SqlFilterOrderOffsetLimit2Mapping[IO] -} - -final class GraphSuite extends DoobieDatabaseSuite with SqlGraphSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlGraphMapping[IO] -} - -final class InterfacesSuite extends DoobieDatabaseSuite with SqlInterfacesSuite { - lazy val mapping = - new DoobieTestMapping(xa) with SqlInterfacesMapping[IO] { - def entityType: TestCodec[EntityType] = - (Meta[Int].timap(EntityType.fromInt)(EntityType.toInt), false) - } -} - -final class InterfacesSuite2 extends DoobieDatabaseSuite with SqlInterfacesSuite2 { - lazy val mapping = - new DoobieTestMapping(xa) with SqlInterfacesMapping2[IO] { - def entityType: TestCodec[EntityType] = - (Meta[Int].timap(EntityType.fromInt)(EntityType.toInt), false) - } -} - -final class JsonbSuite extends DoobieDatabaseSuite with SqlJsonbSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlJsonbMapping[IO] -} - -final class LikeSuite extends DoobieDatabaseSuite with SqlLikeSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlLikeMapping[IO] -} - -final class MappingValidatorValidSuite extends DoobieDatabaseSuite with SqlMappingValidatorValidSuite { - // no DB instance needed for this suite - lazy val mapping = new DoobieTestMapping(null) with SqlMappingValidatorValidMapping[IO] { - def genre: TestCodec[Genre] = (Meta[Int].imap(Genre.fromInt)(Genre.toInt), false) - def feature: TestCodec[Feature] = (Meta[String].imap(Feature.fromString)(_.toString), false) - } - override def munitFixtures: Seq[IOFixture[_]] = Nil -} - -final class MappingValidatorInvalidSuite extends DoobieDatabaseSuite with SqlMappingValidatorInvalidSuite { - // no DB instance needed for this suite - lazy val mapping = new DoobieTestMapping(null) with SqlMappingValidatorInvalidMapping[IO] - override def munitFixtures: Seq[IOFixture[_]] = Nil -} - -final class MixedSuite extends DoobieDatabaseSuite with SqlMixedSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlMixedMapping[IO] -} - -final class MovieSuite extends DoobieDatabaseSuite with SqlMovieSuite { - lazy val mapping = - new DoobieTestMapping(xa) with SqlMovieMapping[IO] { - def genre: TestCodec[Genre] = (Meta[Int].imap(Genre.fromInt)(Genre.toInt), false) - def feature: TestCodec[Feature] = (Meta[String].imap(Feature.fromString)(_.toString), false) - def tagList: TestCodec[List[String]] = (Meta[Int].imap(Tags.fromInt)(Tags.toInt), false) - } -} - -final class MutationSuite extends DoobieDatabaseSuite with SqlMutationSuite { - lazy val mapping = - new DoobieTestMapping(xa) with SqlMutationMapping[IO] { - def updatePopulation(id: Int, population: Int): IO[Unit] = - sql"update city set population=$population where id=$id" - .update - .run - .transact(transactor) - .as(()) - - def createCity(name: String, countryCode: String, population: Int): IO[Int] = - sql""" - INSERT INTO city (id, name, countrycode, district, population) - VALUES (nextval('city_id'), $name, $countryCode, 'ignored', $population) - RETURNING id - """.query[Int] - .unique - .transact(transactor) - } -} - -final class NestedEffectsSuite extends DoobieDatabaseSuite with SqlNestedEffectsSuite { - def mapping: IO[(CurrencyService[IO], Mapping[IO])] = - for { - currencyService0 <- CurrencyService[IO] - } yield { - val mapping = - new DoobieTestMapping(xa) with SqlNestedEffectsMapping[IO] { - lazy val currencyService = currencyService0 - } - (currencyService0, mapping) - } -} - -final class Paging1Suite extends DoobieDatabaseSuite with SqlPaging1Suite { - lazy val mapping = new DoobieTestMapping(xa) with SqlPaging1Mapping[IO] -} - -final class Paging2Suite extends DoobieDatabaseSuite with SqlPaging2Suite { - lazy val mapping = new DoobieTestMapping(xa) with SqlPaging2Mapping[IO] -} - -final class Paging3Suite extends DoobieDatabaseSuite with SqlPaging3Suite { - lazy val mapping = new DoobieTestMapping(xa) with SqlPaging3Mapping[IO] -} - -final class ProjectionSuite extends DoobieDatabaseSuite with SqlProjectionSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlProjectionMapping[IO] -} - -final class RecursiveInterfacesSuite extends DoobieDatabaseSuite with SqlRecursiveInterfacesSuite { - lazy val mapping = - new DoobieTestMapping(xa) with SqlRecursiveInterfacesMapping[IO] { - def itemType: TestCodec[ItemType] = - (Meta[Int].timap(ItemType.fromInt)(ItemType.toInt), false) - } -} - -final class SiblingListsSuite extends DoobieDatabaseSuite with SqlSiblingListsSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlSiblingListsData[IO] -} - -final class TreeSuite extends DoobieDatabaseSuite with SqlTreeSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlTreeMapping[IO] -} - -final class UnionsSuite extends DoobieDatabaseSuite with SqlUnionSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlUnionsMapping[IO] -} - -final class WorldSuite extends DoobieDatabaseSuite with SqlWorldSuite { - lazy val mapping = new DoobieTestMapping(xa) with SqlWorldMapping[IO] -} - -final class WorldCompilerSuite extends DoobieDatabaseSuite with SqlWorldCompilerSuite { - type Fragment = doobie.Fragment - - def mapping: IO[(Mapping[IO], SqlStatsMonitor[IO,Fragment])] = - DoobieMonitor.statsMonitor[IO].map(mon => (new DoobieTestMapping(xa, mon) with SqlWorldMapping[IO], mon)) - - def simpleRestrictedQuerySql: String = - "SELECT country.code , country.name FROM country WHERE (( country.code = ?) )" - - def simpleFilteredQuerySql: String = - "SELECT city.id , city.name FROM city WHERE (city.name ILIKE ?)" -} diff --git a/modules/skunk/js-jvm/src/test/scala/SkunkDatabaseSuite.scala b/modules/skunk/js-jvm/src/test/scala/SkunkDatabaseSuite.scala index 3a515a9f..ecbe37bc 100644 --- a/modules/skunk/js-jvm/src/test/scala/SkunkDatabaseSuite.scala +++ b/modules/skunk/js-jvm/src/test/scala/SkunkDatabaseSuite.scala @@ -19,7 +19,7 @@ import java.time.{Duration, LocalDate, LocalTime, OffsetDateTime} import java.util.UUID import cats.effect.{IO, Resource, Sync} -import io.circe.Json +import io.circe.{Decoder => CDecoder, Encoder => CEncoder, Json} import munit.catseffect.IOFixture import natchez.Trace.Implicits.noop import skunk.{ Codec => SCodec, Session } @@ -29,30 +29,31 @@ import skunk.circe.codec.{ all => ccodec } import grackle._, skunk._ import grackle.sql.test._ - -trait SkunkDatabaseSuite extends SqlDatabaseSuite { - - def poolResource: Resource[IO, Session[IO]] = { - postgresConnectionInfoResource.flatMap { connInfo => - import connInfo._ - - Session.single[IO]( - host = if (host == "0.0.0.0") "127.0.0.1" else host, - port = port, - user = username, - password = Some(password), - database = databaseName, - //debug = true, - ) - } +import grackle.sqlpg.test._ + +trait SkunkDatabaseSuite extends SqlPgDatabaseSuite { + + def poolResource: Resource[IO, Resource[IO, Session[IO]]] = { + val connInfo = postgresConnectionInfo + import connInfo._ + + Session.pooled[IO]( + host = host, + port = port, + user = username, + password = Some(password), + database = databaseName, + max = 3, + //debug = true, + ) } - val poolFixture = ResourceSuiteLocalFixture("skunk", poolResource) + val poolFixture: IOFixture[Resource[IO, Session[IO]]] = ResourceSuiteLocalFixture("skunk", poolResource) override def munitFixtures: Seq[IOFixture[_]] = Seq(poolFixture) - def pool = Resource.eval(IO(poolFixture())) + def pool: Resource[IO, Session[IO]] = poolFixture() - abstract class SkunkTestMapping[F[_]: Sync](pool: Resource[F,Session[F]], monitor: SkunkMonitor[F] = SkunkMonitor.noopMonitor[IO]) + abstract class SkunkTestMapping[F[_]: Sync](pool: Resource[F, Session[F]], monitor: SkunkMonitor[F] = SkunkMonitor.noopMonitor[IO]) extends SkunkMapping[F](pool, monitor) with SqlTestMapping[F] { type TestCodec[T] = (SCodec[T], Boolean) @@ -60,6 +61,7 @@ trait SkunkDatabaseSuite extends SqlDatabaseSuite { def bool: TestCodec[Boolean] = (codec.bool, false) def text: TestCodec[String] = (codec.text, false) def varchar: TestCodec[String] = (codec.varchar, false) + def nvarchar: TestCodec[String] = (codec.text, false) // For compatbiltity with Oracle in these Suites. def bpchar(len: Int): TestCodec[String] = (codec.bpchar(len), false) def int2: TestCodec[Int] = (codec.int2.imap(_.toInt)(_.toShort), false) def int4: TestCodec[Int] = (codec.int4, false) @@ -78,7 +80,7 @@ trait SkunkDatabaseSuite extends SqlDatabaseSuite { def nullable[T](c: TestCodec[T]): TestCodec[T] = (c._1.opt, true).asInstanceOf[TestCodec[T]] - def list[T](c: TestCodec[T]): TestCodec[List[T]] = { + def list[T: CDecoder : CEncoder](c: TestCodec[T]): TestCodec[List[T]] = { val cc = c._1.asInstanceOf[SCodec[Any]] val ty = _root_.skunk.data.Type(s"_${cc.types.head.name}", cc.types) val encode = (elem: Any) => cc.encode(elem).head.get diff --git a/modules/skunk/js-jvm/src/test/scala/SkunkSuites.scala b/modules/skunk/js-jvm/src/test/scala/SkunkSuites.scala index 3662a6f5..8e5a3a87 100644 --- a/modules/skunk/js-jvm/src/test/scala/SkunkSuites.scala +++ b/modules/skunk/js-jvm/src/test/scala/SkunkSuites.scala @@ -15,8 +15,9 @@ package grackle.skunk.test -import cats.effect.IO +import cats.effect.{IO, Resource} import munit.catseffect.IOFixture +import skunk.Session import skunk.codec.{all => codec} import skunk.implicits._ @@ -135,26 +136,33 @@ final class MovieSuite extends SkunkDatabaseSuite with SqlMovieSuite { } final class MutationSuite extends SkunkDatabaseSuite with SqlMutationSuite { + // A resource that copies and drops the table used in the tests. + def withDuplicatedTables(p: Resource[IO, Session[IO]]): Resource[IO, Resource[IO, Session[IO]]] = { + val alloc = p.use(_.execute(sql"CREATE TABLE city_copy AS SELECT * FROM city".command)).as(p) + val free = p.use(_.execute(sql"DROP TABLE city_copy".command)).void + Resource.make(alloc)(_ => free) + } + + override def poolResource: Resource[IO, Resource[IO, Session[IO]]] = + super.poolResource.flatMap(withDuplicatedTables) + lazy val mapping = new SkunkTestMapping(pool) with SqlMutationMapping[IO] { def updatePopulation(id: Int, population: Int): IO[Unit] = - pool.use { s => - s.prepareR(sql"update city set population=${codec.int4} where id=${codec.int4}".command).use { ps => - ps.execute(population *: id *: EmptyTuple).void - } - } - - def createCity(name: String, countryCode: String, population: Int): IO[Int] = - pool.use { s => - val q = sql""" - INSERT INTO city (id, name, countrycode, district, population) - VALUES (nextval('city_id'), ${codec.varchar}, ${codec.bpchar(3)}, 'ignored', ${codec.int4}) - RETURNING id - """.query(codec.int4) - s.prepareR(q).use { ps => - ps.unique(name *: countryCode *: population *: EmptyTuple) - } - } + pool.use(_.prepareR(sql"UPDATE city_copy SET population=${codec.int4} WHERE id=${codec.int4}".command).use { ps => + ps.execute(population *: id *: EmptyTuple).void + }) + + def createCity(name: String, countryCode: String, population: Int): IO[Int] = { + val q = sql""" + INSERT INTO city_copy (id, name, countrycode, district, population) + VALUES (nextval('city_id'), ${codec.varchar}, ${codec.bpchar(3)}, 'ignored', ${codec.int4}) + RETURNING id + """.query(codec.int4) + pool.use(_.prepareR(q).use { ps => + ps.unique(name *: countryCode *: population *: EmptyTuple) + }) + } } } @@ -222,6 +230,8 @@ final class WorldCompilerSuite extends SkunkDatabaseSuite with SqlWorldCompilerS def simpleFilteredQuerySql: String = "SELECT city.id, city.name FROM city WHERE (city.name ILIKE $1)" + + def filterArg: String = "Linh%" } // Needed to avoid an unused import warning in Scala 3.3.0+ diff --git a/modules/skunk/js-jvm/src/test/scala/subscription/SubscriptionMapping.scala b/modules/skunk/js-jvm/src/test/scala/subscription/SubscriptionMapping.scala index ab017486..e39fb25b 100644 --- a/modules/skunk/js-jvm/src/test/scala/subscription/SubscriptionMapping.scala +++ b/modules/skunk/js-jvm/src/test/scala/subscription/SubscriptionMapping.scala @@ -15,7 +15,7 @@ package grackle.skunk.test.subscription -import cats.effect.{ Resource, Sync } +import cats.effect.{Resource, Sync} import skunk.Session import skunk.codec.all._ import skunk.implicits._ @@ -112,6 +112,6 @@ trait SubscriptionMapping[F[_]] extends SkunkMapping[F] { } object SubscriptionMapping extends SkunkMappingCompanion { - def mkMapping[F[_]: Sync](pool: Resource[F,Session[F]], monitor: SkunkMonitor[F]): Mapping[F] = + def mkMapping[F[_]: Sync](pool: Resource[F, Session[F]], monitor: SkunkMonitor[F]): Mapping[F] = new SkunkMapping[F](pool, monitor) with SubscriptionMapping[F] } diff --git a/modules/skunk/shared/src/main/scala/SkunkMapping.scala b/modules/skunk/shared/src/main/scala/SkunkMapping.scala index c4aca011..848cea3b 100644 --- a/modules/skunk/shared/src/main/scala/SkunkMapping.scala +++ b/modules/skunk/shared/src/main/scala/SkunkMapping.scala @@ -29,6 +29,7 @@ import org.tpolecat.sourcepos.SourcePos import org.tpolecat.typename.TypeName import grackle.sql._ +import grackle.sqlpg._ abstract class SkunkMapping[F[_]]( val pool: Resource[F, Session[F]], @@ -37,7 +38,7 @@ abstract class SkunkMapping[F[_]]( implicit val M: Sync[F] ) extends Mapping[F] with SkunkMappingLike[F] -trait SkunkMappingLike[F[_]] extends Mapping[F] with SqlMappingLike[F] { outer => +trait SkunkMappingLike[F[_]] extends Mapping[F] with SqlPgMappingLike[F] { outer => implicit val M: Sync[F] val pool: Resource[F, Session[F]] diff --git a/modules/sql/shared/src/main/scala-2/Like.scala b/modules/sql-core/src/main/scala-2/Like.scala similarity index 100% rename from modules/sql/shared/src/main/scala-2/Like.scala rename to modules/sql-core/src/main/scala-2/Like.scala diff --git a/modules/sql/shared/src/main/scala-3/Like.scala b/modules/sql-core/src/main/scala-3/Like.scala similarity index 100% rename from modules/sql/shared/src/main/scala-3/Like.scala rename to modules/sql-core/src/main/scala-3/Like.scala diff --git a/modules/sql/shared/src/main/scala/FailedJoin.scala b/modules/sql-core/src/main/scala/FailedJoin.scala similarity index 100% rename from modules/sql/shared/src/main/scala/FailedJoin.scala rename to modules/sql-core/src/main/scala/FailedJoin.scala diff --git a/modules/sql/shared/src/main/scala/SqlMapping.scala b/modules/sql-core/src/main/scala/SqlMapping.scala similarity index 93% rename from modules/sql/shared/src/main/scala/SqlMapping.scala rename to modules/sql-core/src/main/scala/SqlMapping.scala index 5eff5339..572277da 100644 --- a/modules/sql/shared/src/main/scala/SqlMapping.scala +++ b/modules/sql-core/src/main/scala/SqlMapping.scala @@ -38,7 +38,23 @@ abstract class SqlMapping[F[_]](implicit val M: MonadThrow[F]) extends Mapping[F /** An abstract mapping that is backed by a SQL database. */ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self => import SqlQuery.{EmptySqlQuery, SqlJoin, SqlSelect, SqlUnion} - import TableExpr.{DerivedTableRef, SubqueryRef, TableRef, WithRef} + import TableExpr.{DerivedTableRef, Laterality, SubqueryRef, TableRef, WithRef} + + def collateToFragment: Fragment + def aliasDefToFragment(alias: String): Fragment + def offsetToFragment(offset: Fragment): Fragment + def limitToFragment(limit: Fragment): Fragment + def likeToFragment(expr: Fragment, pattern: String, caseInsensitive: Boolean): Fragment + def ascribedNullToFragment(codec: Codec): Fragment + def collateSelected: Boolean + def distinctOnToFragment(dcols: List[Fragment]): Fragment + def distinctOrderColumn(owner: ColumnOwner, col: SqlColumn, predCols: List[SqlColumn], orders: List[OrderSelection[_]]): SqlColumn + def encapsulateUnionBranch(s: SqlSelect): SqlSelect + def mkLateral(inner: Boolean): Laterality + def defaultOffsetForSubquery(subquery: SqlQuery): SqlQuery + def defaultOffsetForLimit(limit: Option[Int]): Option[Int] + def orderToFragment(col: Fragment, ascending: Boolean, nullsLast: Boolean): Fragment + def nullsHigh: Boolean case class TableName(name: String) object TableName { @@ -307,17 +323,16 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self val prefix0 = prefix.map(_+".").getOrElse("") val qualified = prefix0+base val collated0 = - if (collated) s"""($qualified COLLATE "C")""" - else qualified - val aliased = - if (base == alias) collated0 - else s"$collated0 AS $alias" - Fragments.const(aliased) + if (collated) Fragments.const(s"($qualified") |+| collateToFragment |+| Fragments.const(")") + else Fragments.const(qualified) + + if (base == alias) collated0 + else collated0 |+| Fragments.const(s" AS $alias") } def mkDefFragment(base: Fragment, collated: Boolean, alias: String): Fragment = { val collated0 = - if (collated) Fragments.parentheses(base |+| Fragments.const(s""" COLLATE "C"""")) + if (collated) Fragments.parentheses(base |+| collateToFragment) else base collated0 |+| Fragments.const(s"AS $alias") } @@ -326,7 +341,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self val prefix0 = prefix.map(_+".").getOrElse("") val qualified = prefix0+alias val base = Fragments.const(qualified) - if (collated) Fragments.parentheses(base |+| Fragments.const(s""" COLLATE "C"""")) + if (collated) Fragments.parentheses(base |+| collateToFragment) else base } @@ -383,12 +398,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self def toDefFragment(collated: Boolean): Aliased[Fragment] = Aliased.columnDef(this).map { case (_, column0) => - val ascribed = - Fragments.sqlTypeName(codec) match { - case Some(name) => Fragments.const(s"(NULL :: $name)") - case None => Fragments.const("NULL") - } - mkDefFragment(ascribed, collated, column0) + mkDefFragment(ascribedNullToFragment(codec), collated, column0) } def toRefFragment(collated: Boolean): Aliased[Fragment] = @@ -491,6 +501,41 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self } } + case class FirstValueColumn(owner: ColumnOwner, col: SqlColumn, partitionCols: List[SqlColumn], orders: List[OrderSelection[_]]) extends SqlColumn { + def column: String = col.column + def codec: Codec = col.codec + def scalaTypeName: String = col.scalaTypeName + def pos: SourcePos = col.pos + + def resultPath: List[String] = col.resultPath + + def subst(from: ColumnOwner, to: ColumnOwner): SqlColumn = + copy(owner = if(owner.isSameOwner(from)) to else owner, col = col.subst(from, to), partitionCols = partitionCols.map(_.subst(from, to))) + + def partitionColsToFragment: Aliased[Fragment] = + if (partitionCols.isEmpty) Aliased.pure(Fragments.empty) + else + partitionCols.traverse(_.toRefFragment(false)).map { fcols => + Fragments.const("PARTITION BY ") |+| fcols.intercalate(Fragments.const(", ")) + } + + def toDefFragment(collated: Boolean): Aliased[Fragment] = + for { + col0 <- col.toRefFragment(false) + cols0 <- partitionColsToFragment + tc0 <- Aliased.columnDef(this) + orderBy <- SqlQuery.ordersToFragment(orders) + } yield { + val base = Fragments.const("first_value") |+| Fragments.parentheses(col0) |+| Fragments.const(" OVER ") |+| Fragments.parentheses(cols0 |+| orderBy) + mkDefFragment(base, false, tc0._2) + } + + def toRefFragment(collated: Boolean): Aliased[Fragment] = + Aliased.columnRef(this).map { + case (table0, column0) => mkRefFragment(table0, column0, collated) + } + } + /** Representation of a column of an embedded subobject * * Columns of embedded subobjects have a different context path from columns of @@ -517,7 +562,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self def toDefFragment(collated: Boolean): Aliased[Fragment] = col match { case _: SubqueryColumn => - col.in(owner).toDefFragment(collated) + col.toDefFragment(collated) case _ => Aliased.columnDef(this).map { case (table0, column0) => mkDefFragment(table0, column, collated, column0) @@ -1070,6 +1115,8 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self /** Yields a copy of this `TableExpr` with all occurences of `from` replaced by `to` */ def subst(from: TableExpr, to: TableExpr): TableExpr + + def delateral: TableExpr = this } object TableExpr { @@ -1094,7 +1141,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self if (name == alias) Fragments.const(name) else - Fragments.const(s"$name AS $alias") + Fragments.const(s"$name") |+| aliasDefToFragment(alias) def toRefFragment: Aliased[Fragment] = Aliased.tableRef(this).map(Fragments.const) @@ -1102,8 +1149,36 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self override def toString: String = name } + trait Laterality { + def toFragment: Fragment + def joinToFragment(join: SqlJoin, subquery: SubqueryRef): Aliased[Fragment] + def joinPredicates(join: SqlJoin): List[Predicate] + } + object Laterality { + def apply(lateral: Boolean, inner: Boolean): Laterality = + if (lateral) mkLateral(inner) else NotLateral + + case object NotLateral extends Laterality { + def toFragment: Fragment = Fragments.empty + def joinToFragment(join: SqlJoin, subquery: SubqueryRef): Aliased[Fragment] = join.toFragmentWithoutLaterality + def joinPredicates(join: SqlJoin): List[Predicate] = Nil + } + case object Lateral extends Laterality { + def toFragment: Fragment = Fragments.const("LATERAL ") + def joinToFragment(join: SqlJoin, subquery: SubqueryRef): Aliased[Fragment] = join.toFragmentWithoutLaterality + def joinPredicates(join: SqlJoin): List[Predicate] = Nil + } + case class Apply(inner: Boolean) extends Laterality { + def toFragment: Fragment = Fragments.const(if(inner) "CROSS " else "OUTER ") |+| Fragments.const("APPLY ") + def joinToFragment(join: SqlJoin, subquery: SubqueryRef): Aliased[Fragment] = subquery.toDefFragment + def joinPredicates(join: SqlJoin): List[Predicate] = + if(!join.isPredicate) join.on.map { case (p, c) => Eql(p.toTerm, c.toTerm) } + else Nil + } + } + /** Table expression corresponding to a subquery */ - case class SubqueryRef(context: Context, name: String, subquery: SqlQuery, lateral: Boolean) extends TableExpr { + case class SubqueryRef(context: Context, name: String, subquery: SqlQuery, laterality: Laterality) extends TableExpr { def owns(col: SqlColumn): Boolean = col.owner.isSameOwner(this) || subquery.owns(col) def contains(other: ColumnOwner): Boolean = isSameOwner(other) || subquery.contains(other) @@ -1117,16 +1192,19 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self def subst(from: TableExpr, to: TableExpr): SubqueryRef = copy(subquery = subquery.subst(from, to)) - def toDefFragment: Aliased[Fragment] = { - val lateral0 = if(lateral) Fragments.const("LATERAL ") else Fragments.empty + def toDefFragment: Aliased[Fragment] = for { alias <- Aliased.tableDef(this) - sub <- subquery.toFragment - } yield lateral0 |+| Fragments.parentheses(sub) |+| Fragments.const(s" AS $alias") - } + sub <- defaultOffsetForSubquery(subquery).toFragment + } yield laterality.toFragment |+| Fragments.parentheses(sub) |+| aliasDefToFragment(alias) def toRefFragment: Aliased[Fragment] = Aliased.tableRef(this).map(Fragments.const) + + def joinToFragment(join: SqlJoin): Aliased[Fragment] = + laterality.joinToFragment(join, this) + + override def delateral: TableExpr = copy(laterality = Laterality.NotLateral) } /** Table expression corresponding to a common table expression */ @@ -1185,7 +1263,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self if (name == uname) Fragments.const(s"$name") else - Fragments.const(s"$uname AS $name") + Fragments.const(s"$uname") |+| aliasDefToFragment(name) } } @@ -1230,7 +1308,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ): Result[SqlQuery] /** Yields an equivalent query encapsulating this query as a subquery */ - def toSubquery(name: String, lateral: Boolean): Result[SqlSelect] + def toSubquery(name: String): Result[SqlSelect] /** Yields a collection of `SqlSelects` which when combined as a union are equivalent to this query */ def asSelects: List[SqlSelect] = @@ -1647,10 +1725,9 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ) case Like(x, pattern, caseInsensitive) => - val op = if(caseInsensitive) " ILIKE " else " LIKE " binaryOp2(x)( fx => - fx |+| Fragments.const(s" $op ") |+| Fragments.bind(stringEncoder, pattern), + likeToFragment(fx, pattern, caseInsensitive), Some(stringEncoder) ) @@ -1691,15 +1768,11 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self case OrderSelection(term, ascending, nullsLast) => term match { case SqlColumnTerm(col) => - val dir = if(ascending) "" else " DESC" - val nulls = s" NULLS ${if(nullsLast) "LAST" else "FIRST"}" - val res = for { fc <- col.toRefFragment(Fragments.needsCollation(col.codec)) } yield { - fc |+| Fragments.const(s"$dir$nulls") + orderToFragment(fc, ascending, nullsLast) } - res case other => Aliased.internalError[Fragment](s"Unresolved term $other in ORDER BY") } }.map(forders => Fragments.const(" ORDER BY ") |+| forders.intercalate(Fragments.const(","))) @@ -1787,8 +1860,8 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ): Result[SqlQuery] = mkSelect.flatMap(_.addFilterOrderByOffsetLimit(filter, orderBy, offset, limit, predIsOneToOne, parentConstraints)) - def toSubquery(name: String, lateral: Boolean): Result[SqlSelect] = - mkSelect.flatMap(_.toSubquery(name, lateral)) + def toSubquery(name: String): Result[SqlSelect] = + mkSelect.flatMap(_.toSubquery(name)) def isUnion: Boolean = false def oneToOne: Boolean = false @@ -1829,7 +1902,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self def withContext(context: Context, extraCols: List[SqlColumn], extraJoins: List[SqlJoin]): Result[SqlSelect] = copy(context = context, cols = (cols ++ extraCols).distinct, joins = extraJoins ++ joins).success - def isUnion: Boolean = table.isUnion + def isUnion: Boolean = table.isUnion || context.tpe.underlying.isUnion || context.tpe.underlying.isInterface def isDistinct: Boolean = distinct.nonEmpty @@ -1861,8 +1934,8 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self lazy val orderCols: Result[List[SqlColumn]] = orders.traverse(os => columnForSqlTerm(context, os.term)).map(_.distinct) /** Does the given column need collation? */ - def needsCollation(col: SqlColumn): Result[Boolean] = { - if(Fragments.needsCollation(col.codec)) orderCols.map(_.contains(col)) + def selectedNeedsCollation(col: SqlColumn): Result[Boolean] = { + if(collateSelected && Fragments.needsCollation(col.codec)) orderCols.map(_.contains(col)) else false.success } @@ -1897,59 +1970,40 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self parentTableForType(parentContext).flatMap { parentTable => val inner = !context.tpe.isNullable && !context.tpe.isList - def mkSubquery(multiTable: Boolean, nested: SqlSelect, joinCols: List[SqlColumn], suffix: String): Result[SqlSelect] = { - def isMergeable: Boolean = - !multiTable && !nested.joins.exists(_.isPredicate) && nested.wheres.isEmpty && nested.orders.isEmpty && nested.offset.isEmpty && nested.limit.isEmpty && !nested.isDistinct + def mkJoins(joins: List[Join]): SqlSelect = { + def mkSubquery(multiTable: Boolean, nested: SqlSelect, joinCols: List[SqlColumn], suffix: String): SqlSelect = { + def isMergeable: Boolean = + !multiTable && !nested.joins.exists(_.isPredicate) && nested.wheres.isEmpty && nested.orders.isEmpty && nested.offset.isEmpty && nested.limit.isEmpty && !nested.isDistinct - if(isMergeable) nested.success - else { - val exposeCols = nested.table match { - case _: TableRef => joinCols - case _ => Nil - } - nested.copy(cols = (exposeCols ++ nested.cols).distinct).toSubquery(syntheticName(suffix), lateral).map { base0 => + if(isMergeable) nested + else { + val exposeCols = nested.table match { + case _: TableRef => joinCols + case _ => Nil + } + val base0 = nested.copy(cols = (exposeCols ++ nested.cols).distinct).toSubquery(syntheticName(suffix), Laterality(lateral, inner)) base0.copy(cols = nested.cols.map(_.derive(base0.table))) } } - } - - def mkJoins(joins0: List[Join], multiTable: Boolean): Result[SqlSelect] = { - val lastJoin = joins0.last - mkSubquery(multiTable, this, lastJoin.childCols(table), "_nested").map { base => - - val initialJoins = - joins0.init.map(_.toSqlJoin(parentContext, parentContext, inner)) - - val finalJoins = { - val parentTable = lastJoin.parentTable(parentContext) - - if(!isAssociative(context)) { - val finalJoin = lastJoin.toSqlJoin(parentTable, base.table, inner) - finalJoin :: Nil - } else { - val assocTable = TableExpr.DerivedTableRef(context, Some(base.table.name+"_assoc"), base.table, true) - val assocJoin = lastJoin.toSqlJoin(parentTable, assocTable, inner) - - val finalJoin = - SqlJoin( - assocTable, - base.table, - keyColumnsForType(context).map { key => (key.in(assocTable), key) }, - false - ) - List(assocJoin, finalJoin) - } - } - val allJoins = initialJoins ++ finalJoins ++ base.joins + def mkNested(outer: Boolean, withs: List[WithRef], table: TableExpr, cols: List[SqlColumn], wheres: List[Predicate], joins: List[SqlJoin]): SqlSelect = { + val extraWheres = + if(!outer) Nil + else + joins.flatMap { join => + join.child match { + case sq: SubqueryRef => sq.laterality.joinPredicates(join) + case _ => Nil + } + } SqlSelect( context = parentContext, - withs = base.withs, - table = allJoins.head.parent, - cols = base.cols, - joins = allJoins, - wheres = base.wheres, + withs = withs, + table = table, + cols = cols, + joins = joins, + wheres = wheres ++ extraWheres, orders = Nil, offset = None, limit = None, @@ -1958,6 +2012,42 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self predicate = false ) } + + val initJoins = joins.init + val multiJoinHead = initJoins.headOption + val multiTable = multiJoinHead.nonEmpty + val multiTableSuffixJoins = initJoins.drop(1).map(_.toSqlJoin(parentContext, parentContext, inner)) + val lastJoin = joins.last + val lastJoinParentTable = lastJoin.parentTable(parentContext) + + val base = mkSubquery(multiTable, this, lastJoin.childCols(table), "_nested") + + val finalJoins = + if(!isAssociative(context)) { + val finalJoin = lastJoin.toSqlJoin(lastJoinParentTable, base.table, inner) + finalJoin :: Nil + } else { + val assocTable = TableExpr.DerivedTableRef(context, Some(base.table.name+"_assoc"), base.table, true) + val assocJoin = lastJoin.toSqlJoin(lastJoinParentTable, assocTable, inner) + + val finalJoin = + SqlJoin( + assocTable, + base.table, + keyColumnsForType(context).map { key => (key.in(assocTable), key) }, + false + ) + List(assocJoin, finalJoin) + } + + val nestedJoins = multiTableSuffixJoins ++ finalJoins ++ base.joins + val nested = mkNested(!multiTable, base.withs, nestedJoins.head.parent, base.cols, base.wheres, nestedJoins) + + multiJoinHead.fold(nested) { firstJoin0 => + val nestedBase = mkSubquery(false, nested, firstJoin0.childCols(nested.table), "_multi") + val initialJoin = firstJoin0.toSqlJoin(parentTable, nestedBase.table, inner) + mkNested(true, Nil, parentTable, nestedBase.cols, Nil, initialJoin :: nestedBase.joins) + } } val fieldName = context.path.head @@ -1991,31 +2081,8 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self joins = embeddedJoins ) - case Some(SqlObject(_, single@(_ :: Nil))) => - mkJoins(single, false) - - case Some(SqlObject(_, firstJoin :: tail)) => - for { - nested <- mkJoins(tail, true) - base <- mkSubquery(false, nested, firstJoin.childCols(nested.table), "_multi") - } yield { - val initialJoin = firstJoin.toSqlJoin(parentTable, base.table, inner) - - SqlSelect( - context = parentContext, - withs = base.withs, - table = parentTable, - cols = base.cols, - joins = initialJoin :: base.joins, - wheres = base.wheres, - orders = Nil, - offset = None, - limit = None, - distinct = Nil, - oneToOne = oneToOne, - predicate = false - ) - } + case Some(SqlObject(_, joins)) => + mkJoins(joins).success case _ => Result.internalError(s"Non-subobject mapping for field '$fieldName' of type ${parentContext.tpe}") @@ -2047,7 +2114,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self val baseRef = base0.table val predName = syntheticName("_pred") - val predSub = SubqueryRef(context, predName, predQuery, parentConstraints.nonEmpty) + val predSub = SubqueryRef(context, predName, predQuery, Laterality.NotLateral) val on = keyCols.map(key => (key.derive(baseRef), key.derive(predSub))) val predJoin = SqlJoin(baseRef, predSub, on, true) @@ -2057,7 +2124,8 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self table = baseRef, cols = (base0.cols ++ joinCols).distinct, joins = predJoin :: base0.joins, - wheres = Nil + wheres = base0.wheres ++ on.map { case (p, c) => Eql(p.toTerm, c.toTerm) }, + predicate = true ) } @@ -2098,7 +2166,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self pred0.traverse(p => contextualiseWhereTerms(context, table, p)).flatMap { pred1 => oss.traverse(os => contextualiseOrderTerms(context, table, os)).flatMap { oss0 => - val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.toTerm, true, true)) + val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.toTerm, true, nullsHigh)) val nonNullKeys = keyCols.map(col => IsNull(col.toTerm, false)) // We could use row_number in this case @@ -2124,7 +2192,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ) val numberedName = syntheticName("_numbered") - val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, true) + val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, Laterality.NotLateral) val partitionTerm = partitionCol.derive(subWithRowItem).toTerm.asInstanceOf[Term[Int]] val windowPred = mkWindowPred(partitionTerm) @@ -2153,7 +2221,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self pred0.traverse(p => contextualiseWhereTerms(context, table, p)).flatMap { pred1 => oss.traverse(os => contextualiseOrderTerms(context, table, os)).flatMap { oss0 => - val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.toTerm, true, true)) + val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.toTerm, true, nullsHigh)) val nonNullKeys = keyCols.map(col => IsNull(col.toTerm, false)) val partitionCol = SqlColumn.PartitionColumn(table, "row_item", partitionBy, orders) @@ -2178,7 +2246,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ) val numberedName = syntheticName("_numbered") - val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, true) + val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, Laterality.NotLateral) val partitionTerm = partitionCol.derive(subWithRowItem).toTerm.asInstanceOf[Term[Int]] val windowPred = mkWindowPred(partitionTerm) @@ -2210,7 +2278,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self pred0.traverse(p => contextualiseWhereTerms(context, baseRef, p)).flatMap { pred1 => oss.traverse(os => contextualiseOrderTerms(context, baseRef, os)).flatMap { oss0 => - val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.derive(baseRef).toTerm, true, true)) + val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.derive(baseRef).toTerm, true, nullsHigh)) val predCols = keyCols.map(_.derive(baseRef)) val nonNullKeys = predCols.map(col => IsNull(col.toTerm, false)) @@ -2226,7 +2294,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self table = baseRef, cols = (partitionCol :: exposeCols ++ predCols).distinct, joins = (filterJoins ++ orderJoins).distinct, - wheres = (pred1 ++ nonNullKeys ++ wheres).distinct, + wheres = (pred1 ++ nonNullKeys).distinct, orders = Nil, offset = None, limit = None, @@ -2236,7 +2304,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ) val numberedName = syntheticName("_numbered") - val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, true) + val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, Laterality.NotLateral) val partitionTerm = partitionCol.derive(subWithRowItem).toTerm.asInstanceOf[Term[Int]] val windowPred = mkWindowPred(partitionTerm) @@ -2268,10 +2336,10 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self oss.traverse(os => contextualiseOrderTerms(context, table, os)).flatMap { oss0 => oss0.filterA(os => columnForSqlTerm(context, os.term).map(keyCols.contains)).flatMap { nonKeyOrders => - val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.toTerm, true, true)) + val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.toTerm, true, nullsHigh)) val nonNullKeys = keyCols.map(col => IsNull(col.toTerm, false)) - val distOrders = keyCols.map(col => OrderSelection(col.toTerm, true, true)) ++ nonKeyOrders + val distOrders = keyCols.map(col => OrderSelection(col.toTerm, true, nullsHigh)) ++ nonKeyOrders val partitionCol = SqlColumn.PartitionColumn(table, "row_item", partitionBy, orders) val distPartitionCol = SqlColumn.PartitionColumn(table, "row_item_dist", partitionBy ++ keyCols, distOrders) @@ -2296,7 +2364,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ) val numberedName = syntheticName("_numbered") - val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, true) + val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, Laterality.NotLateral) val partitionTerm = partitionCol.derive(subWithRowItem).toTerm.asInstanceOf[Term[Int]] val distPartitionTerm = distPartitionCol.derive(subWithRowItem).toTerm.asInstanceOf[Term[Int]] @@ -2331,11 +2399,11 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self oss.traverse(os => contextualiseOrderTerms(context, baseRef, os)).flatMap { oss0 => oss0.filterA(os => columnForSqlTerm(context, os.term).map(keyCols.contains)).flatMap { nonKeyOrders => - val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.derive(baseRef).toTerm, true, true)) + val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.derive(baseRef).toTerm, true, nullsHigh)) val predCols = keyCols.map(_.derive(baseRef)) val nonNullKeys = predCols.map(col => IsNull(col.toTerm, false)) - val distOrders = keyCols.map(col => OrderSelection(col.derive(baseRef).toTerm, true, true)) ++ nonKeyOrders + val distOrders = keyCols.map(col => OrderSelection(col.derive(baseRef).toTerm, true, nullsHigh)) ++ nonKeyOrders val partitionCol = SqlColumn.PartitionColumn(table, "row_item", partitionBy, orders) val distPartitionCol = SqlColumn.PartitionColumn(table, "row_item_dist", partitionBy ++ predCols, distOrders) @@ -2351,7 +2419,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self table = baseRef, cols = (partitionCol :: distPartitionCol :: exposeCols ++ predCols).distinct, joins = (filterJoins ++ orderJoins).distinct, - wheres = (pred1 ++ nonNullKeys ++ wheres).distinct, + wheres = (pred1 ++ nonNullKeys).distinct, orders = Nil, offset = None, limit = None, @@ -2361,7 +2429,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ) val numberedName = syntheticName("_numbered") - val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, true) + val subWithRowItem = SubqueryRef(context, numberedName, selWithRowItem, Laterality.NotLateral) val partitionTerm = partitionCol.derive(subWithRowItem).toTerm.asInstanceOf[Term[Int]] val distPartitionTerm = distPartitionCol.derive(subWithRowItem).toTerm.asInstanceOf[Term[Int]] @@ -2401,7 +2469,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self val (nonNullKeys, keyOrder) = offset0.orElse(limit0).map { _ => val nonNullKeys0 = keyCols.map(col => IsNull(col.toTerm, false)) - val keyOrder0 = keyCols.diff(orderCols).map(col => OrderSelection(col.toTerm, true, true)) + val keyOrder0 = keyCols.diff(orderCols).map(col => OrderSelection(col.toTerm, true, nullsHigh)) (nonNullKeys0, keyOrder0) }.getOrElse((Nil, Nil)) @@ -2438,7 +2506,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self pred0.traverse(p => contextualiseWhereTerms(context, baseRef, p)).flatMap { pred1 => oss.traverse(os => contextualiseOrderTerms(context, baseRef, os)).flatMap { oss0 => - val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.derive(baseRef).toTerm, true, true)) + val orders = oss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.derive(baseRef).toTerm, true, nullsHigh)) val predQuery = SqlSelect( context = context, @@ -2446,7 +2514,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self table = baseRef, cols = predCols, joins = (filterJoins ++ orderJoins).distinct, - wheres = (pred1 ++ nonNullKeys ++ wheres).distinct, + wheres = (pred1 ++ nonNullKeys).distinct, orders = orders, offset = offset0, limit = limit0, @@ -2463,16 +2531,16 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self pred0.traverse(p => contextualiseWhereTerms(context, baseRef, p)).flatMap { pred1 => oss.traverse(os => contextualiseOrderTerms(context, baseRef, os)).flatMap { oss0 => oss0.filterA(os => columnForSqlTerm(context, os.term).map(keyCols.contains)).flatMap { nonKeyOrders => - val distOrders = keyCols.map(col => OrderSelection(col.derive(baseRef).toTerm, true, true)) ++ nonKeyOrders + val distOrders = keyCols.map(col => OrderSelection(col.derive(baseRef).toTerm, true, nullsHigh)) ++ nonKeyOrders val distOrderCols = orderCols.diff(keyCols).map(_.derive(baseRef)) val distQuery = SqlSelect( context = context, withs = Nil, table = baseRef, - cols = predCols ++ distOrderCols, // these two are individually distinct and also disjoint, hence no .distinct + cols = predCols ++ distOrderCols.map(col => distinctOrderColumn(baseRef, col, predCols, distOrders)), joins = (filterJoins ++ orderJoins).distinct, - wheres = (pred1 ++ nonNullKeys ++ wheres).distinct, + wheres = (pred1 ++ nonNullKeys).distinct, orders = distOrders, offset = None, limit = None, @@ -2482,11 +2550,11 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self ) val distName = "dist" - val distSub = SubqueryRef(context, distName, distQuery, parentConstraints.nonEmpty) + val distSub = SubqueryRef(context, distName, distQuery, Laterality.NotLateral) val predCols0 = keyCols.map(_.derive(distSub)) oss.traverse(os => contextualiseOrderTerms(context, distSub, os)).flatMap { outerOss0 => - val orders = outerOss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.derive(distSub).toTerm, true, true)) + val orders = outerOss0 ++ keyCols.diff(orderCols).map(col => OrderSelection(col.derive(distSub).toTerm, true, nullsHigh)) val predQuery = SqlSelect( context = context, withs = Nil, @@ -2514,9 +2582,11 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self } /** Yields an equivalent query encapsulating this query as a subquery */ - def toSubquery(name: String, lateral: Boolean): Result[SqlSelect] = { + def toSubquery(name: String): Result[SqlSelect] = toSubquery(name, Laterality.NotLateral).success + + def toSubquery(name: String, lateral: Laterality): SqlSelect = { val ref = SubqueryRef(context, name, this, lateral) - SqlSelect(context, Nil, ref, cols.map(_.derive(ref)), Nil, Nil, Nil, None, None, Nil, oneToOne, predicate).success + SqlSelect(context, Nil, ref, cols.map(_.derive(ref)), Nil, Nil, Nil, None, None, Nil, oneToOne, predicate) } /** If the from clause of this query is a subquery, convert it to a @@ -2539,17 +2609,17 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self _ <- Aliased.pushOwner(this) withs0 <- if (withs.isEmpty) Aliased.pure(Fragments.empty) else withs.traverse(_.toDefFragment).map(fwiths => Fragments.const("WITH ") |+| fwiths.intercalate(Fragments.const(","))) - table0 <- table.toDefFragment - cols0 <- cols.traverse(col => Aliased.liftR(needsCollation(col)).flatMap(col.toDefFragment)) - dcols <- distinct.traverse(col => Aliased.liftR(needsCollation(col)).flatMap(col.toRefFragment)) - dist = if (dcols.isEmpty) Fragments.empty else Fragments.const("DISTINCT ON ") |+| Fragments.parentheses(dcols.intercalate(Fragments.const(", "))) + table0 <- table.delateral.toDefFragment + cols0 <- cols.traverse(col => Aliased.liftR(selectedNeedsCollation(col)).flatMap(col.toDefFragment)) + dcols <- distinct.traverse(col => Aliased.liftR(selectedNeedsCollation(col)).flatMap(col.toRefFragment)) + dist = if (dcols.isEmpty) Fragments.empty else distinctOnToFragment(dcols) joins0 <- joins.traverse(_.toFragment).map(_.combineAll) select = Fragments.const(s"SELECT ") |+| dist |+| cols0.intercalate(Fragments.const(", ")) from = if(table.isRoot) Fragments.empty else Fragments.const(" FROM ") |+| table0 where <- wheresToFragment(context, wheres) orderBy <- ordersToFragment(orders) - off = offset.map(o => Fragments.const(s" OFFSET $o")).getOrElse(Fragments.empty) - lim = limit.map(l => Fragments.const(s" LIMIT $l")).getOrElse(Fragments.empty) + off = offset.orElse(defaultOffsetForLimit(limit)).map(o => offsetToFragment(Fragments.const(s"$o"))).getOrElse(Fragments.empty) + lim = limit.map(l => limitToFragment(Fragments.const(s"$l"))).getOrElse(Fragments.empty) _ <- Aliased.popOwner } yield withs0 |+| select |+| from |+| joins0 |+| where |+| orderBy |+| off |+| lim @@ -2626,8 +2696,8 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self def subst(from: TableExpr, to: TableExpr): SqlUnion = SqlUnion(elems.map(_.subst(from, to))) - def toSubquery(name: String, lateral: Boolean): Result[SqlSelect] = { - val sub = SubqueryRef(context, name, this, lateral) + def toSubquery(name: String): Result[SqlSelect] = { + val sub = SubqueryRef(context, name, this, Laterality.NotLateral) SqlSelect(context, Nil, sub, cols.map(_.derive(sub)), Nil, Nil, Nil, None, None, Nil, false, false).success } @@ -2673,7 +2743,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self for { withFilter0 <- withFilter table <- parentTableForType(context) - sel <- withFilter0.toSubquery(table.name, parentConstraints.nonEmpty) + sel <- withFilter0.toSubquery(table.name) res <- sel.addFilterOrderByOffsetLimit(None, orderBy, offset, limit, predIsOneToOne, parentConstraints) } yield res } @@ -2700,7 +2770,7 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self object SqlUnion { def apply(elems: List[SqlSelect]): SqlUnion = - new SqlUnion(elems.distinct) + new SqlUnion(elems.distinct.map(encapsulateUnionBranch)) } /** Representation of an SQL join */ @@ -2756,6 +2826,16 @@ trait SqlMappingLike[F[_]] extends CirceMappingLike[F] with SqlModule[F] { self /** Render this `SqlJoin` as a `Fragment` */ def toFragment: Aliased[Fragment] = { + child match { + case sq: SubqueryRef => + sq.joinToFragment(this) + + case _ => + toFragmentWithoutLaterality + } + } + + def toFragmentWithoutLaterality: Aliased[Fragment] = { val kind = if (inner) "INNER" else "LEFT" val join = s"$kind JOIN" diff --git a/modules/sql/shared/src/main/scala/SqlModule.scala b/modules/sql-core/src/main/scala/SqlModule.scala similarity index 100% rename from modules/sql/shared/src/main/scala/SqlModule.scala rename to modules/sql-core/src/main/scala/SqlModule.scala diff --git a/modules/sql/shared/src/main/scala/SqlMonitor.scala b/modules/sql-core/src/main/scala/SqlMonitor.scala similarity index 100% rename from modules/sql/shared/src/main/scala/SqlMonitor.scala rename to modules/sql-core/src/main/scala/SqlMonitor.scala diff --git a/modules/sql/shared/src/main/scala/SqlStatsMonitor.scala b/modules/sql-core/src/main/scala/SqlStatsMonitor.scala similarity index 100% rename from modules/sql/shared/src/main/scala/SqlStatsMonitor.scala rename to modules/sql-core/src/main/scala/SqlStatsMonitor.scala diff --git a/modules/sql/shared/src/test/resources/logback-test.xml b/modules/sql-core/src/test/resources/logback-test.xml similarity index 100% rename from modules/sql/shared/src/test/resources/logback-test.xml rename to modules/sql-core/src/test/resources/logback-test.xml diff --git a/modules/sql/shared/src/test/scala/SqlArrayJoinMapping.scala b/modules/sql-core/src/test/scala/SqlArrayJoinMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlArrayJoinMapping.scala rename to modules/sql-core/src/test/scala/SqlArrayJoinMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlArrayJoinSuite.scala b/modules/sql-core/src/test/scala/SqlArrayJoinSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlArrayJoinSuite.scala rename to modules/sql-core/src/test/scala/SqlArrayJoinSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlCoalesceMapping.scala b/modules/sql-core/src/test/scala/SqlCoalesceMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlCoalesceMapping.scala rename to modules/sql-core/src/test/scala/SqlCoalesceMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlCoalesceSuite.scala b/modules/sql-core/src/test/scala/SqlCoalesceSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlCoalesceSuite.scala rename to modules/sql-core/src/test/scala/SqlCoalesceSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlComposedWorldMapping.scala b/modules/sql-core/src/test/scala/SqlComposedWorldMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlComposedWorldMapping.scala rename to modules/sql-core/src/test/scala/SqlComposedWorldMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlComposedWorldSuite.scala b/modules/sql-core/src/test/scala/SqlComposedWorldSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlComposedWorldSuite.scala rename to modules/sql-core/src/test/scala/SqlComposedWorldSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlCompositeKeyMapping.scala b/modules/sql-core/src/test/scala/SqlCompositeKeyMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlCompositeKeyMapping.scala rename to modules/sql-core/src/test/scala/SqlCompositeKeyMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlCompositeKeySuite.scala b/modules/sql-core/src/test/scala/SqlCompositeKeySuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlCompositeKeySuite.scala rename to modules/sql-core/src/test/scala/SqlCompositeKeySuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlCursorJsonMapping.scala b/modules/sql-core/src/test/scala/SqlCursorJsonMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlCursorJsonMapping.scala rename to modules/sql-core/src/test/scala/SqlCursorJsonMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlCursorJsonSuite.scala b/modules/sql-core/src/test/scala/SqlCursorJsonSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlCursorJsonSuite.scala rename to modules/sql-core/src/test/scala/SqlCursorJsonSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlEmbedding2Mapping.scala b/modules/sql-core/src/test/scala/SqlEmbedding2Mapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlEmbedding2Mapping.scala rename to modules/sql-core/src/test/scala/SqlEmbedding2Mapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlEmbedding2Suite.scala b/modules/sql-core/src/test/scala/SqlEmbedding2Suite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlEmbedding2Suite.scala rename to modules/sql-core/src/test/scala/SqlEmbedding2Suite.scala diff --git a/modules/sql/shared/src/test/scala/SqlEmbedding3Mapping.scala b/modules/sql-core/src/test/scala/SqlEmbedding3Mapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlEmbedding3Mapping.scala rename to modules/sql-core/src/test/scala/SqlEmbedding3Mapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlEmbedding3Suite.scala b/modules/sql-core/src/test/scala/SqlEmbedding3Suite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlEmbedding3Suite.scala rename to modules/sql-core/src/test/scala/SqlEmbedding3Suite.scala diff --git a/modules/sql/shared/src/test/scala/SqlEmbeddingMapping.scala b/modules/sql-core/src/test/scala/SqlEmbeddingMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlEmbeddingMapping.scala rename to modules/sql-core/src/test/scala/SqlEmbeddingMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlEmbeddingSuite.scala b/modules/sql-core/src/test/scala/SqlEmbeddingSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlEmbeddingSuite.scala rename to modules/sql-core/src/test/scala/SqlEmbeddingSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlFilterJoinAliasMapping.scala b/modules/sql-core/src/test/scala/SqlFilterJoinAliasMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlFilterJoinAliasMapping.scala rename to modules/sql-core/src/test/scala/SqlFilterJoinAliasMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlFilterJoinAliasSuite.scala b/modules/sql-core/src/test/scala/SqlFilterJoinAliasSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlFilterJoinAliasSuite.scala rename to modules/sql-core/src/test/scala/SqlFilterJoinAliasSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlFilterOrderOffsetLimit2Mapping.scala b/modules/sql-core/src/test/scala/SqlFilterOrderOffsetLimit2Mapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlFilterOrderOffsetLimit2Mapping.scala rename to modules/sql-core/src/test/scala/SqlFilterOrderOffsetLimit2Mapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlFilterOrderOffsetLimit2Suite.scala b/modules/sql-core/src/test/scala/SqlFilterOrderOffsetLimit2Suite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlFilterOrderOffsetLimit2Suite.scala rename to modules/sql-core/src/test/scala/SqlFilterOrderOffsetLimit2Suite.scala diff --git a/modules/sql/shared/src/test/scala/SqlFilterOrderOffsetLimitMapping.scala b/modules/sql-core/src/test/scala/SqlFilterOrderOffsetLimitMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlFilterOrderOffsetLimitMapping.scala rename to modules/sql-core/src/test/scala/SqlFilterOrderOffsetLimitMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlFilterOrderOffsetLimitSuite.scala b/modules/sql-core/src/test/scala/SqlFilterOrderOffsetLimitSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlFilterOrderOffsetLimitSuite.scala rename to modules/sql-core/src/test/scala/SqlFilterOrderOffsetLimitSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlGraphMapping.scala b/modules/sql-core/src/test/scala/SqlGraphMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlGraphMapping.scala rename to modules/sql-core/src/test/scala/SqlGraphMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlGraphSuite.scala b/modules/sql-core/src/test/scala/SqlGraphSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlGraphSuite.scala rename to modules/sql-core/src/test/scala/SqlGraphSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlInterfacesMapping.scala b/modules/sql-core/src/test/scala/SqlInterfacesMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlInterfacesMapping.scala rename to modules/sql-core/src/test/scala/SqlInterfacesMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlInterfacesMapping2.scala b/modules/sql-core/src/test/scala/SqlInterfacesMapping2.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlInterfacesMapping2.scala rename to modules/sql-core/src/test/scala/SqlInterfacesMapping2.scala diff --git a/modules/sql/shared/src/test/scala/SqlInterfacesSuite.scala b/modules/sql-core/src/test/scala/SqlInterfacesSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlInterfacesSuite.scala rename to modules/sql-core/src/test/scala/SqlInterfacesSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlInterfacesSuite2.scala b/modules/sql-core/src/test/scala/SqlInterfacesSuite2.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlInterfacesSuite2.scala rename to modules/sql-core/src/test/scala/SqlInterfacesSuite2.scala diff --git a/modules/sql/shared/src/test/scala/SqlJsonbMapping.scala b/modules/sql-core/src/test/scala/SqlJsonbMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlJsonbMapping.scala rename to modules/sql-core/src/test/scala/SqlJsonbMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlJsonbSuite.scala b/modules/sql-core/src/test/scala/SqlJsonbSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlJsonbSuite.scala rename to modules/sql-core/src/test/scala/SqlJsonbSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlLikeMapping.scala b/modules/sql-core/src/test/scala/SqlLikeMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlLikeMapping.scala rename to modules/sql-core/src/test/scala/SqlLikeMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlLikeSuite.scala b/modules/sql-core/src/test/scala/SqlLikeSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlLikeSuite.scala rename to modules/sql-core/src/test/scala/SqlLikeSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlMappingValidatorInvalidMapping.scala b/modules/sql-core/src/test/scala/SqlMappingValidatorInvalidMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlMappingValidatorInvalidMapping.scala rename to modules/sql-core/src/test/scala/SqlMappingValidatorInvalidMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlMappingValidatorInvalidSuite.scala b/modules/sql-core/src/test/scala/SqlMappingValidatorInvalidSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlMappingValidatorInvalidSuite.scala rename to modules/sql-core/src/test/scala/SqlMappingValidatorInvalidSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlMappingValidatorValidMapping.scala b/modules/sql-core/src/test/scala/SqlMappingValidatorValidMapping.scala similarity index 98% rename from modules/sql/shared/src/test/scala/SqlMappingValidatorValidMapping.scala rename to modules/sql-core/src/test/scala/SqlMappingValidatorValidMapping.scala index 49176164..576f28bb 100644 --- a/modules/sql/shared/src/test/scala/SqlMappingValidatorValidMapping.scala +++ b/modules/sql-core/src/test/scala/SqlMappingValidatorValidMapping.scala @@ -18,7 +18,7 @@ package grackle.sql.test import java.util.UUID import cats.Eq -import io.circe.Encoder +import io.circe.{Decoder, Encoder} import grackle._ import grackle.syntax._ @@ -382,5 +382,8 @@ trait SqlMappingValidatorValidMapping[F[_]] extends SqlTestMapping[F] { implicit def featureEncoder: io.circe.Encoder[Feature] = Encoder[String].contramap(_.toString) + + implicit def featureDecoder: io.circe.Decoder[Feature] = + Decoder[String].map(fromString) } } diff --git a/modules/sql/shared/src/test/scala/SqlMappingValidatorValidSuite.scala b/modules/sql-core/src/test/scala/SqlMappingValidatorValidSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlMappingValidatorValidSuite.scala rename to modules/sql-core/src/test/scala/SqlMappingValidatorValidSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlMixedMapping.scala b/modules/sql-core/src/test/scala/SqlMixedMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlMixedMapping.scala rename to modules/sql-core/src/test/scala/SqlMixedMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlMixedSuite.scala b/modules/sql-core/src/test/scala/SqlMixedSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlMixedSuite.scala rename to modules/sql-core/src/test/scala/SqlMixedSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlMovieMapping.scala b/modules/sql-core/src/test/scala/SqlMovieMapping.scala similarity index 98% rename from modules/sql/shared/src/test/scala/SqlMovieMapping.scala rename to modules/sql-core/src/test/scala/SqlMovieMapping.scala index 96594925..dc904e41 100644 --- a/modules/sql/shared/src/test/scala/SqlMovieMapping.scala +++ b/modules/sql-core/src/test/scala/SqlMovieMapping.scala @@ -23,7 +23,7 @@ import scala.util.Try import cats.{Eq, Order} import cats.implicits._ -import io.circe.Encoder +import io.circe.{Decoder, Encoder} import grackle._ import syntax._ @@ -291,6 +291,9 @@ trait SqlMovieMapping[F[_]] extends SqlTestMapping[F] { self => implicit def featureEncoder: io.circe.Encoder[Feature] = Encoder[String].contramap(_.toString) + + implicit def featureDecoder: io.circe.Decoder[Feature] = + Decoder[String].map(fromString) } object Tags { diff --git a/modules/sql/shared/src/test/scala/SqlMovieSuite.scala b/modules/sql-core/src/test/scala/SqlMovieSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlMovieSuite.scala rename to modules/sql-core/src/test/scala/SqlMovieSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlMutationMapping.scala b/modules/sql-core/src/test/scala/SqlMutationMapping.scala similarity index 98% rename from modules/sql/shared/src/test/scala/SqlMutationMapping.scala rename to modules/sql-core/src/test/scala/SqlMutationMapping.scala index 44d603fb..91243de0 100644 --- a/modules/sql/shared/src/test/scala/SqlMutationMapping.scala +++ b/modules/sql-core/src/test/scala/SqlMutationMapping.scala @@ -30,7 +30,7 @@ trait SqlMutationMapping[F[_]] extends SqlTestMapping[F] { val name = col("name", text) } - object city extends TableDef("city") { + object city extends TableDef("city_copy") { val id = col("id", int4) val countrycode = col("countrycode", bpchar(2)) val name = col("name", text) diff --git a/modules/sql/shared/src/test/scala/SqlMutationSuite.scala b/modules/sql-core/src/test/scala/SqlMutationSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlMutationSuite.scala rename to modules/sql-core/src/test/scala/SqlMutationSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlNestedEffectsMapping.scala b/modules/sql-core/src/test/scala/SqlNestedEffectsMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlNestedEffectsMapping.scala rename to modules/sql-core/src/test/scala/SqlNestedEffectsMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlNestedEffectsSuite.scala b/modules/sql-core/src/test/scala/SqlNestedEffectsSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlNestedEffectsSuite.scala rename to modules/sql-core/src/test/scala/SqlNestedEffectsSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlPaging1Mapping.scala b/modules/sql-core/src/test/scala/SqlPaging1Mapping.scala similarity index 97% rename from modules/sql/shared/src/test/scala/SqlPaging1Mapping.scala rename to modules/sql-core/src/test/scala/SqlPaging1Mapping.scala index a01011a1..3835431c 100644 --- a/modules/sql/shared/src/test/scala/SqlPaging1Mapping.scala +++ b/modules/sql-core/src/test/scala/SqlPaging1Mapping.scala @@ -35,14 +35,14 @@ trait SqlPaging1Mapping[F[_]] extends SqlTestMapping[F] { object country extends TableDef("country") { val code = col("code", bpchar(3)) - val name = col("name", text) + val name = col("name", nvarchar) val numCities = col("num_cities", int8) } object city extends TableDef("city") { val id = col("id", int4) val countrycode = col("countrycode", bpchar(3)) - val name = col("name", text) + val name = col("name", nvarchar) } val schema = @@ -147,7 +147,7 @@ trait SqlPaging1Mapping[F[_]] extends SqlTestMapping[F] { case class PagingInfo(offset: Int, limit: Int) { def elabItems: Elab[Unit] = Elab.transformChild { child => - FilterOrderByOffsetLimit(None, Some(List(OrderSelection(orderTerm))), Some(offset), Some(limit), child) + FilterOrderByOffsetLimit(None, Some(List(OrderSelection(orderTerm, nullsLast = nullsHigh))), Some(offset), Some(limit), child) } def elabTotal: Elab[Unit] = diff --git a/modules/sql/shared/src/test/scala/SqlPaging1Suite.scala b/modules/sql-core/src/test/scala/SqlPaging1Suite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlPaging1Suite.scala rename to modules/sql-core/src/test/scala/SqlPaging1Suite.scala diff --git a/modules/sql/shared/src/test/scala/SqlPaging2Mapping.scala b/modules/sql-core/src/test/scala/SqlPaging2Mapping.scala similarity index 97% rename from modules/sql/shared/src/test/scala/SqlPaging2Mapping.scala rename to modules/sql-core/src/test/scala/SqlPaging2Mapping.scala index 6ef9b10e..15510777 100644 --- a/modules/sql/shared/src/test/scala/SqlPaging2Mapping.scala +++ b/modules/sql-core/src/test/scala/SqlPaging2Mapping.scala @@ -34,14 +34,14 @@ trait SqlPaging2Mapping[F[_]] extends SqlTestMapping[F] { object country extends TableDef("country") { val code = col("code", bpchar(3)) - val name = col("name", text) + val name = col("name", nvarchar) val numCities = col("num_cities", int8) } object city extends TableDef("city") { val id = col("id", int4) val countrycode = col("countrycode", bpchar(3)) - val name = col("name", text) + val name = col("name", nvarchar) } val schema = @@ -137,7 +137,7 @@ trait SqlPaging2Mapping[F[_]] extends SqlTestMapping[F] { case class PagingInfo(offset: Option[Int], limit: Option[Int]) { def elabItems: Elab[Unit] = Elab.transformChild { child => - FilterOrderByOffsetLimit(None, Some(List(OrderSelection(orderTerm))), offset, limit, child) + FilterOrderByOffsetLimit(None, Some(List(OrderSelection(orderTerm, nullsLast = nullsHigh))), offset, limit, child) } def elabHasMore: Elab[Unit] = diff --git a/modules/sql/shared/src/test/scala/SqlPaging2Suite.scala b/modules/sql-core/src/test/scala/SqlPaging2Suite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlPaging2Suite.scala rename to modules/sql-core/src/test/scala/SqlPaging2Suite.scala diff --git a/modules/sql/shared/src/test/scala/SqlPaging3Mapping.scala b/modules/sql-core/src/test/scala/SqlPaging3Mapping.scala similarity index 97% rename from modules/sql/shared/src/test/scala/SqlPaging3Mapping.scala rename to modules/sql-core/src/test/scala/SqlPaging3Mapping.scala index f2e8844c..2eed2df2 100644 --- a/modules/sql/shared/src/test/scala/SqlPaging3Mapping.scala +++ b/modules/sql-core/src/test/scala/SqlPaging3Mapping.scala @@ -42,14 +42,14 @@ trait SqlPaging3Mapping[F[_]] extends SqlTestMapping[F] { object country extends TableDef("country") { val code = col("code", bpchar(3)) - val name = col("name", text) + val name = col("name", nvarchar) val numCities = col("num_cities", int8) } object city extends TableDef("city") { val id = col("id", int4) val countrycode = col("countrycode", bpchar(3)) - val name = col("name", text) + val name = col("name", nvarchar) } val schema = @@ -151,7 +151,7 @@ trait SqlPaging3Mapping[F[_]] extends SqlTestMapping[F] { def elabItems: Elab[Unit] = Elab.transformChild { child => val lim0 = if (hasHasMore) limit.map(_+1) else limit - val items = FilterOrderByOffsetLimit(None, Some(List(OrderSelection(orderTerm))), offset, lim0, child) + val items = FilterOrderByOffsetLimit(None, Some(List(OrderSelection(orderTerm, nullsLast = nullsHigh))), offset, lim0, child) if (hasHasMore) TransformCursor(genItems, items) else items } diff --git a/modules/sql/shared/src/test/scala/SqlPaging3Suite.scala b/modules/sql-core/src/test/scala/SqlPaging3Suite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlPaging3Suite.scala rename to modules/sql-core/src/test/scala/SqlPaging3Suite.scala diff --git a/modules/sql/shared/src/test/scala/SqlProjectionMapping.scala b/modules/sql-core/src/test/scala/SqlProjectionMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlProjectionMapping.scala rename to modules/sql-core/src/test/scala/SqlProjectionMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlProjectionSuite.scala b/modules/sql-core/src/test/scala/SqlProjectionSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlProjectionSuite.scala rename to modules/sql-core/src/test/scala/SqlProjectionSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlRecursiveInterfacesMapping.scala b/modules/sql-core/src/test/scala/SqlRecursiveInterfacesMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlRecursiveInterfacesMapping.scala rename to modules/sql-core/src/test/scala/SqlRecursiveInterfacesMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlRecursiveInterfacesSuite.scala b/modules/sql-core/src/test/scala/SqlRecursiveInterfacesSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlRecursiveInterfacesSuite.scala rename to modules/sql-core/src/test/scala/SqlRecursiveInterfacesSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlSiblingListsMapping.scala b/modules/sql-core/src/test/scala/SqlSiblingListsMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlSiblingListsMapping.scala rename to modules/sql-core/src/test/scala/SqlSiblingListsMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlSiblingListsSuite.scala b/modules/sql-core/src/test/scala/SqlSiblingListsSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlSiblingListsSuite.scala rename to modules/sql-core/src/test/scala/SqlSiblingListsSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlTestMapping.scala b/modules/sql-core/src/test/scala/SqlTestMapping.scala similarity index 91% rename from modules/sql/shared/src/test/scala/SqlTestMapping.scala rename to modules/sql-core/src/test/scala/SqlTestMapping.scala index 8ec9cf08..8cfeb01e 100644 --- a/modules/sql/shared/src/test/scala/SqlTestMapping.scala +++ b/modules/sql-core/src/test/scala/SqlTestMapping.scala @@ -18,7 +18,7 @@ package grackle.sql.test import java.time.{Duration, LocalDate, LocalTime, OffsetDateTime} import java.util.UUID -import io.circe.Json +import io.circe.{Decoder => CDecoder, Encoder => CEncoder, Json} import org.tpolecat.sourcepos.SourcePos import org.tpolecat.typename.TypeName @@ -31,6 +31,7 @@ trait SqlTestMapping[F[_]] extends SqlMappingLike[F] { outer => def bool: TestCodec[Boolean] def text: TestCodec[String] def varchar: TestCodec[String] + def nvarchar: TestCodec[String] def bpchar(len: Int): TestCodec[String] def int2: TestCodec[Int] def int4: TestCodec[Int] @@ -48,7 +49,7 @@ trait SqlTestMapping[F[_]] extends SqlMappingLike[F] { outer => def jsonb: TestCodec[Json] def nullable[T](c: TestCodec[T]): TestCodec[T] - def list[T](c: TestCodec[T]): TestCodec[List[T]] + def list[T: CDecoder : CEncoder](c: TestCodec[T]): TestCodec[List[T]] def col[T](colName: String, codec: TestCodec[T])(implicit tableName: TableName, typeName: TypeName[T], pos: SourcePos): ColumnRef = ColumnRef(tableName.name, colName, codec, typeName.value, pos) diff --git a/modules/sql/shared/src/test/scala/SqlTreeMapping.scala b/modules/sql-core/src/test/scala/SqlTreeMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlTreeMapping.scala rename to modules/sql-core/src/test/scala/SqlTreeMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlTreeSuite.scala b/modules/sql-core/src/test/scala/SqlTreeSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlTreeSuite.scala rename to modules/sql-core/src/test/scala/SqlTreeSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlUnionSuite.scala b/modules/sql-core/src/test/scala/SqlUnionSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlUnionSuite.scala rename to modules/sql-core/src/test/scala/SqlUnionSuite.scala diff --git a/modules/sql/shared/src/test/scala/SqlUnionsMapping.scala b/modules/sql-core/src/test/scala/SqlUnionsMapping.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlUnionsMapping.scala rename to modules/sql-core/src/test/scala/SqlUnionsMapping.scala diff --git a/modules/sql/shared/src/test/scala/SqlWorldCompilerSuite.scala b/modules/sql-core/src/test/scala/SqlWorldCompilerSuite.scala similarity index 98% rename from modules/sql/shared/src/test/scala/SqlWorldCompilerSuite.scala rename to modules/sql-core/src/test/scala/SqlWorldCompilerSuite.scala index be7b7d12..52ff6092 100644 --- a/modules/sql/shared/src/test/scala/SqlWorldCompilerSuite.scala +++ b/modules/sql-core/src/test/scala/SqlWorldCompilerSuite.scala @@ -38,6 +38,8 @@ trait SqlWorldCompilerSuite extends CatsEffectSuite { /** Expected SQL string for the simple filtered query test. */ def simpleFilteredQuerySql: String + def filterArg: String + test("simple restricted query") { val query = @@ -131,7 +133,7 @@ trait SqlWorldCompilerSuite extends CatsEffectSuite { SqlStatsMonitor.SqlStats( Select("cities", Filter(Like(schema.ref("City") / "name","Linh%",true), Select("name"))), simpleFilteredQuerySql, - List("Linh%"), + List(filterArg), 3, 2 ) diff --git a/modules/sql/shared/src/test/scala/SqlWorldMapping.scala b/modules/sql-core/src/test/scala/SqlWorldMapping.scala similarity index 95% rename from modules/sql/shared/src/test/scala/SqlWorldMapping.scala rename to modules/sql-core/src/test/scala/SqlWorldMapping.scala index 4631b633..48bababa 100644 --- a/modules/sql/shared/src/test/scala/SqlWorldMapping.scala +++ b/modules/sql-core/src/test/scala/SqlWorldMapping.scala @@ -29,18 +29,18 @@ trait SqlWorldMapping[F[_]] extends SqlTestMapping[F] { } object country extends TableDef("country") { val code = col("code", bpchar(3)) - val name = col("name", text) - val continent = col("continent", text) - val region = col("region", text) + val name = col("name", nvarchar) + val continent = col("continent", nvarchar) + val region = col("region", nvarchar) val surfacearea = col("surfacearea", float4) val indepyear = col("indepyear", nullable(int2)) val population = col("population", int4) val lifeexpectancy = col("lifeexpectancy", nullable(float4)) val gnp = col("gnp", nullable(numeric(10, 2))) val gnpold = col("gnpold", nullable(numeric(10, 2))) - val localname = col("localname", text) - val governmentform = col("governmentform", text) - val headofstate = col("headofstate", nullable(text)) + val localname = col("localname", nvarchar) + val governmentform = col("governmentform", nvarchar) + val headofstate = col("headofstate", nullable(nvarchar)) val capitalId = col("capital", nullable(int4)) val numCities = col("num_cities", int8) val code2 = col("code2", bpchar(2)) @@ -49,14 +49,14 @@ trait SqlWorldMapping[F[_]] extends SqlTestMapping[F] { object city extends TableDef("city") { val id = col("id", int4) val countrycode = col("countrycode", bpchar(3)) - val name = col("name", text) - val district = col("district", text) + val name = col("name", nvarchar) + val district = col("district", nvarchar) val population = col("population", int4) } object countrylanguage extends TableDef("countrylanguage") { val countrycode = col("countrycode", bpchar(3)) - val language = col("language", text) + val language = col("language", nvarchar) val isOfficial = col("isOfficial", bool) val percentage = col("percentage", float4) } diff --git a/modules/sql/shared/src/test/scala/SqlWorldSuite.scala b/modules/sql-core/src/test/scala/SqlWorldSuite.scala similarity index 100% rename from modules/sql/shared/src/test/scala/SqlWorldSuite.scala rename to modules/sql-core/src/test/scala/SqlWorldSuite.scala diff --git a/modules/sql-pg/js-jvm/src/test/scala/SqlPgDatabaseSuite.scala b/modules/sql-pg/js-jvm/src/test/scala/SqlPgDatabaseSuite.scala new file mode 100644 index 00000000..444ff552 --- /dev/null +++ b/modules/sql-pg/js-jvm/src/test/scala/SqlPgDatabaseSuite.scala @@ -0,0 +1,36 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle.sqlpg +package test + +import munit.CatsEffectSuite + +trait SqlPgDatabaseSuite extends CatsEffectSuite { + case class PostgresConnectionInfo(host: String, port: Int) { + + val driverClassName = "org.postgresql.Driver" + val databaseName = "test" + val jdbcUrl = s"jdbc:postgresql://$host:$port/$databaseName" + val username = "test" + val password = "test" + } + object PostgresConnectionInfo { + val DefaultPort = 5432 + } + + val postgresConnectionInfo: PostgresConnectionInfo = + PostgresConnectionInfo("localhost", PostgresConnectionInfo.DefaultPort) +} diff --git a/modules/sql-pg/shared/src/main/scala/SqlPgMapping.scala b/modules/sql-pg/shared/src/main/scala/SqlPgMapping.scala new file mode 100644 index 00000000..5cc57914 --- /dev/null +++ b/modules/sql-pg/shared/src/main/scala/SqlPgMapping.scala @@ -0,0 +1,80 @@ +// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) +// Copyright (c) 2016-2023 Grackle Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grackle +package sqlpg + +import cats.MonadThrow +import cats.syntax.all._ + +import grackle.sql.SqlMappingLike +import Query.OrderSelection + +abstract class SqlPgMapping[F[_]](implicit val M: MonadThrow[F]) extends Mapping[F] with SqlPgMappingLike[F] + +trait SqlPgMappingLike[F[_]] extends SqlMappingLike[F] { + import SqlQuery.SqlSelect + import TableExpr.Laterality + + def collateToFragment: Fragment = + Fragments.const(" COLLATE \"C\"") + + def aliasDefToFragment(alias: String): Fragment = + Fragments.const(s" AS $alias") + + def offsetToFragment(offset: Fragment): Fragment = + Fragments.const(" OFFSET ") |+| offset + + def limitToFragment(limit: Fragment): Fragment = + Fragments.const(" LIMIT ") |+| limit + + def likeToFragment(expr: Fragment, pattern: String, caseInsensitive: Boolean): Fragment = { + val op = if(caseInsensitive) "ILIKE" else "LIKE" + expr |+| Fragments.const(s" $op ") |+| Fragments.bind(stringEncoder, pattern) + } + + def ascribedNullToFragment(codec: Codec): Fragment = + Fragments.sqlTypeName(codec) match { + case Some(name) => Fragments.const(s"(NULL :: $name)") + case None => Fragments.const("NULL") + } + + def collateSelected: Boolean = true + + def distinctOnToFragment(dcols: List[Fragment]): Fragment = + Fragments.const("DISTINCT ON ") |+| Fragments.parentheses(dcols.intercalate(Fragments.const(", "))) + + def distinctOrderColumn(owner: ColumnOwner, col: SqlColumn, predCols: List[SqlColumn], orders: List[OrderSelection[_]]): SqlColumn = col + + def encapsulateUnionBranch(s: SqlSelect): SqlSelect = s + def mkLateral(inner: Boolean): Laterality = Laterality.Lateral + def defaultOffsetForSubquery(subquery: SqlQuery): SqlQuery = subquery + def defaultOffsetForLimit(limit: Option[Int]): Option[Int] = None + + def orderToFragment(col: Fragment, ascending: Boolean, nullsLast: Boolean): Fragment = { + val dir = if(ascending) Fragments.empty else Fragments.const(" DESC") + val nulls = + if(!nullsLast && ascending) + Fragments.const(" NULLS FIRST ") + else if(nullsLast && !ascending) + Fragments.const(" NULLS LAST ") + else + Fragments.empty + + col |+| dir |+| nulls + } + + def nullsHigh: Boolean = true +} diff --git a/modules/sql/js-jvm/src/test/scala/SqlDatabaseSuite.scala b/modules/sql/js-jvm/src/test/scala/SqlDatabaseSuite.scala deleted file mode 100644 index 538a2382..00000000 --- a/modules/sql/js-jvm/src/test/scala/SqlDatabaseSuite.scala +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA) -// Copyright (c) 2016-2023 Grackle Contributors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package grackle.sql.test - -import scala.concurrent.duration._ - -import cats.effect.{IO, Resource} -import cats.implicits._ -import io.chrisdavenport.whaletail.{Containers, Docker} -import io.chrisdavenport.whaletail.manager._ -import munit.CatsEffectSuite -import munit.catseffect._ - -trait SqlDatabaseSuite extends CatsEffectSuite { - case class PostgresConnectionInfo(host: String, port: Int) { - val driverClassName = "org.postgresql.Driver" - val databaseName = "test" - val jdbcUrl = s"jdbc:postgresql://$host:$port/$databaseName" - val username = "test" - val password = "test" - } - object PostgresConnectionInfo { - val DefaultPort = 5432 - } - - def bindPath(path: String): String = - buildinfo.BuildInfo.baseDirectory + "/" + path - - val postgresConnectionInfoResource: Resource[IO, PostgresConnectionInfo] = - Docker.default[IO].flatMap(client => - WhaleTailContainer.build( - client, - image = "postgres", - tag = "11.8".some, - ports = Map(PostgresConnectionInfo.DefaultPort -> None), - binds = List(Containers.Bind(bindPath("modules/sql/shared/src/test/resources/db/"), "/docker-entrypoint-initdb.d/", "ro")), - env = Map( - "POSTGRES_USER" -> "test", - "POSTGRES_PASSWORD" -> "test", - "POSTGRES_DB" -> "test" - ), - labels = Map.empty - ).evalTap( - ReadinessStrategy.checkReadiness( - client, - _, - ReadinessStrategy.LogRegex(".*database system is ready to accept connections.*".r, 2), - 30.seconds - ) - ) - ).flatMap(container => - Resource.eval( - container.ports.get(PostgresConnectionInfo.DefaultPort).liftTo[IO](new Throwable("Missing Port")) - ) - ).map { - case (host, port) => PostgresConnectionInfo(host, port) - } - - val postgresConnectionInfo: IOFixture[PostgresConnectionInfo] = - ResourceSuiteLocalFixture("postgresconnectioninfo", postgresConnectionInfoResource) - - override def munitFixtures: Seq[IOFixture[_]] = Seq(postgresConnectionInfo) -} diff --git a/profile/src/main/scala/Bench.scala b/profile/src/main/scala/Bench.scala index 091e8861..2a76db78 100644 --- a/profile/src/main/scala/Bench.scala +++ b/profile/src/main/scala/Bench.scala @@ -24,13 +24,14 @@ import _root_.doobie.util.meta.Meta import _root_.doobie.util.transactor.Transactor import grackle._ -import doobie.postgres.{DoobieMapping, DoobieMappingCompanion, DoobieMonitor} +import doobie.{DoobieMappingCompanion, DoobieMonitor} +import doobie.postgres.DoobiePgMapping import sql.Like import syntax._ import Query._, Predicate._, Value._ import QueryCompiler._ -trait WorldPostgresSchema[F[_]] extends DoobieMapping[F] { +trait WorldPostgresSchema[F[_]] extends DoobiePgMapping[F] { object country extends TableDef("country") { val code = col("code", Meta[String]) @@ -230,7 +231,7 @@ trait WorldMapping[F[_]] extends WorldPostgresSchema[F] { object WorldMapping extends DoobieMappingCompanion { def mkMapping[F[_]: Sync](transactor: Transactor[F], monitor: DoobieMonitor[F]): Mapping[F] = - new DoobieMapping[F](transactor, monitor) with WorldMapping[F] + new DoobiePgMapping[F](transactor, monitor) with WorldMapping[F] } object Bench extends IOApp { diff --git a/run-local.sh b/run-local.sh index e5a060d9..608b88be 100755 --- a/run-local.sh +++ b/run-local.sh @@ -1,5 +1,3 @@ #!/bin/sh -docker-compose \ - -f local-docker-compose.yml \ - up -d +docker compose up -d --wait diff --git a/scripts/mssql-query.sh b/scripts/mssql-query.sh new file mode 100755 index 00000000..b5c335b6 --- /dev/null +++ b/scripts/mssql-query.sh @@ -0,0 +1 @@ +sqlcmd -S localhost -U sa -P Test_123_Test -d test -Y 10 -y 10 -i $* diff --git a/scripts/oracle-opts.sql b/scripts/oracle-opts.sql new file mode 100644 index 00000000..a0dee8ab --- /dev/null +++ b/scripts/oracle-opts.sql @@ -0,0 +1,2 @@ +show errors +set markup csv on diff --git a/scripts/oracle-query.sh b/scripts/oracle-query.sh new file mode 100755 index 00000000..b510e739 --- /dev/null +++ b/scripts/oracle-query.sh @@ -0,0 +1,2 @@ +rlwrap sqlplus test/test@//localhost/FREEPDB1 + diff --git a/query.sh b/scripts/pg-query.sh similarity index 100% rename from query.sh rename to scripts/pg-query.sh diff --git a/stop-local.sh b/stop-local.sh index dcc096f2..8a082d4a 100755 --- a/stop-local.sh +++ b/stop-local.sh @@ -1,5 +1,3 @@ #!/bin/sh -docker-compose \ - -f local-docker-compose.yml \ - stop +docker compose stop diff --git a/testdata/mssql/array-join.sql b/testdata/mssql/array-join.sql new file mode 100644 index 00000000..a1f603fd --- /dev/null +++ b/testdata/mssql/array-join.sql @@ -0,0 +1,41 @@ +CREATE TABLE array_join_root ( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE array_join_list_a ( + id VARCHAR(100) PRIMARY KEY, + root_id VARCHAR(100), + a_elem VARCHAR(100) CHECK (ISJSON(a_elem) = 1) +); + +CREATE TABLE array_join_list_b ( + id VARCHAR(100) PRIMARY KEY, + root_id VARCHAR(100), + b_elem INTEGER +); + +INSERT INTO array_join_root (id) VALUES +('r0'), +('r1'); + +INSERT INTO array_join_list_a (id, root_id, a_elem) VALUES +('a0', 'r0', '["foo1", "foo2"]'), +('a1', 'r0', '["bar1", "bar2"]'), +('a2', 'r0', '["baz1", "baz2"]'), +('a3', 'r0', '["quux1", "quux2"]'), +('a4', 'r1', '["foo11", "foo22"]'), +('a5', 'r1', '["bar11", "bar22"]'), +('a6', 'r1', '["baz11", "baz22"]'), +('a7', 'r1', '["quux11", "quux22"]'); + +INSERT INTO array_join_list_b (id, root_id, b_elem) VALUES +('b0', 'r0', '23'), +('b1', 'r0', '13'), +('b2', 'r0', '17'), +('b3', 'r0', '11'), +('b4', 'r1', '231'), +('b5', 'r1', '131'), +('b6', 'r1', '171'), +('b7', 'r1', '111'); + +GO diff --git a/testdata/mssql/coalesce.sql b/testdata/mssql/coalesce.sql new file mode 100644 index 00000000..0d6468c1 --- /dev/null +++ b/testdata/mssql/coalesce.sql @@ -0,0 +1,44 @@ +CREATE TABLE r ( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE ca ( + id VARCHAR(100) PRIMARY KEY, + rid VARCHAR(100) NOT NULL, + a INTEGER NOT NULL +); + +CREATE TABLE cb ( + id VARCHAR(100) PRIMARY KEY, + rid VARCHAR(100) NOT NULL, + b BIT NOT NULL +); + +CREATE TABLE cc ( + id VARCHAR(100) PRIMARY KEY, + rid VARCHAR(100) NOT NULL, + c DATETIMEOFFSET(7) NOT NULL +); + +INSERT INTO r (id) VALUES +('R1'), +('R2'), +('R3'); + +INSERT INTO ca (id, rid, a) VALUES +('CA1a', 'R1', '10'), +('CA1b', 'R1', '11'), +('CA2', 'R2', '20'), +('CA3', 'R3', '30'); + +INSERT INTO cb (id, rid, b) VALUES +('CB2a', 'R2', 1), +('CB2b', 'R2', 0), +('CB3', 'R3', 1); + +INSERT INTO cc (id, rid, c) VALUES +('CC1', 'R1', '2020-05-27 21:00:00 +02:00'), +('CC2', 'R2', '2004-10-19 10:23:54 +02:00'), +('CC3', 'R3', '2014-10-19 10:23:54 +02:00'); + +GO diff --git a/testdata/mssql/composite-keys.sql b/testdata/mssql/composite-keys.sql new file mode 100644 index 00000000..ba20cb29 --- /dev/null +++ b/testdata/mssql/composite-keys.sql @@ -0,0 +1,26 @@ +CREATE TABLE composite_key_parent ( + key_1 INTEGER NOT NULL, + key_2 VARCHAR(100) NOT NULL, + PRIMARY KEY (key_1, key_2) +); + +CREATE TABLE composite_key_child ( + id INTEGER PRIMARY KEY, + parent_1 INTEGER NOT NULL, + parent_2 VARCHAR(100) NOT NULL, + FOREIGN KEY (parent_1, parent_2) REFERENCES composite_key_parent (key_1, key_2) +); + +INSERT INTO composite_key_parent (key_1, key_2) VALUES +(1, 'foo'), +(1, 'bar'), +(2, 'foo'), +(2, 'bar'); + +INSERT INTO composite_key_child (id, parent_1, parent_2) VALUES +(1, 1, 'foo'), +(2, 1, 'bar'), +(3, 2, 'foo'), +(4, 2, 'bar'); + +GO diff --git a/testdata/mssql/cursor-json.sql b/testdata/mssql/cursor-json.sql new file mode 100644 index 00000000..9f00451b --- /dev/null +++ b/testdata/mssql/cursor-json.sql @@ -0,0 +1,10 @@ +CREATE TABLE brands ( + id Int PRIMARY KEY, + categories Int +) + +INSERT INTO brands (id, categories) VALUES +('1', '8'), +('2', '16') + +GO diff --git a/testdata/mssql/embedding.sql b/testdata/mssql/embedding.sql new file mode 100644 index 00000000..c6e0dece --- /dev/null +++ b/testdata/mssql/embedding.sql @@ -0,0 +1,41 @@ +CREATE TABLE films ( + title VARCHAR(100) PRIMARY KEY, + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100) +); + +CREATE TABLE series ( + title VARCHAR(100) PRIMARY KEY, + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100) +); + +CREATE TABLE episodes2 ( + title VARCHAR(100) PRIMARY KEY, + series_title VARCHAR(100) NOT NULL, + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100) +); + +INSERT INTO films (title, synopsis_short, synopsis_long) VALUES +('Film 1', 'Short film 1', 'Long film 1'), +('Film 2', 'Short film 2', 'Long film 2'), +('Film 3', 'Short film 3', 'Long film 3'); + +INSERT INTO series (title, synopsis_short, synopsis_long) VALUES +('Series 1', 'Short series 1', 'Long series 1'), +('Series 2', 'Short series 2', 'Long series 2'), +('Series 3', 'Short series 3', 'Long series 3'); + +INSERT INTO episodes2 (title, series_title, synopsis_short, synopsis_long) VALUES +('S01E01', 'Series 1', 'Short S01E01', 'Long S01E01'), +('S01E02', 'Series 1', 'Short S01E02', 'Long S01E02'), +('S01E03', 'Series 1', 'Short S01E03', 'Long S01E03'), +('S02E01', 'Series 2', 'Short S02E01', 'Long S02E01'), +('S02E02', 'Series 2', 'Short S02E02', 'Long S02E02'), +('S02E03', 'Series 2', 'Short S02E03', 'Long S02E03'), +('S03E01', 'Series 3', 'Short S03E01', 'Long S03E01'), +('S03E02', 'Series 3', 'Short S03E02', 'Long S03E02'), +('S03E03', 'Series 3', 'Short S03E03', 'Long S03E03'); + +GO diff --git a/testdata/mssql/embedding2.sql b/testdata/mssql/embedding2.sql new file mode 100644 index 00000000..f51695ce --- /dev/null +++ b/testdata/mssql/embedding2.sql @@ -0,0 +1,20 @@ +CREATE TABLE t_program ( + c_program_id VARCHAR(100) NOT NULL PRIMARY KEY +); + +CREATE TABLE t_observation ( + c_program_id VARCHAR(100) NOT NULL REFERENCES t_program(c_program_id), + c_observation_id VARCHAR(100) NOT NULL PRIMARY KEY +); + +INSERT INTO t_program (c_program_id) VALUES +('foo'), +('bar'); + +INSERT INTO t_observation (c_program_id, c_observation_id) VALUES +('foo', 'fo1'), +('foo', 'fo2'), +('bar', 'bo1'), +('bar', 'bo2'); + +GO diff --git a/testdata/mssql/filter-join-alias.sql b/testdata/mssql/filter-join-alias.sql new file mode 100644 index 00000000..a33c8526 --- /dev/null +++ b/testdata/mssql/filter-join-alias.sql @@ -0,0 +1,17 @@ +CREATE TABLE episodes3 ( + id VARCHAR(100), + name VARCHAR(100), + PRIMARY KEY (id, name) +); + +CREATE TABLE images3 ( + public_url VARCHAR(100) PRIMARY KEY, + id VARCHAR(100) NOT NULL, + name VARCHAR(100) NOT NULL +); + +INSERT INTO episodes3 (id, name) VALUES ('a', 'abc'); + +INSERT INTO images3 (public_url, id, name) VALUES ('test', 'a', 'abc'); + +GO diff --git a/testdata/mssql/filter-order-offset-limit-2.sql b/testdata/mssql/filter-order-offset-limit-2.sql new file mode 100644 index 00000000..d050461d --- /dev/null +++ b/testdata/mssql/filter-order-offset-limit-2.sql @@ -0,0 +1,50 @@ +CREATE TABLE root_2 ( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE containers_2 ( + id VARCHAR(100) PRIMARY KEY, + root_id VARCHAR(100) +); + +CREATE TABLE lista_2 ( + id VARCHAR(100) PRIMARY KEY, + container_id VARCHAR(100) +); + +CREATE TABLE listb_2 ( + id VARCHAR(100) PRIMARY KEY, + container_id VARCHAR(100) +); + +INSERT INTO root_2 (id) VALUES +('r0'), +('r1'); + +INSERT INTO containers_2 (id, root_id) VALUES +('c0', 'r0'), +('c1', 'r0'), +('c2', 'r1'), +('c3', 'r1'); + +INSERT INTO lista_2 (id, container_id) VALUES +('a00', 'c0'), +('a01', 'c0'), +('a10', 'c1'), +('a11', 'c1'), +('a20', 'c2'), +('a21', 'c2'), +('a30', 'c3'), +('a31', 'c3'); + +INSERT INTO listb_2 (id, container_id) VALUES +('b00', 'c0'), +('b01', 'c0'), +('b10', 'c1'), +('b11', 'c1'), +('b20', 'c2'), +('b21', 'c2'), +('b30', 'c3'), +('b31', 'c3'); + +GO diff --git a/testdata/mssql/filter-order-offset-limit.sql b/testdata/mssql/filter-order-offset-limit.sql new file mode 100644 index 00000000..94490038 --- /dev/null +++ b/testdata/mssql/filter-order-offset-limit.sql @@ -0,0 +1,41 @@ +CREATE TABLE root ( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE lista ( + id VARCHAR(100) PRIMARY KEY, + root_id VARCHAR(100), + a_elem VARCHAR(100) +); + +CREATE TABLE listb ( + id VARCHAR(100) PRIMARY KEY, + root_id VARCHAR(100), + b_elem INTEGER +); + +INSERT INTO root (id) VALUES +('r0'), +('r1'); + +INSERT INTO lista (id, root_id, a_elem) VALUES +('a0', 'r0', 'foo'), +('a1', 'r0', 'bar'), +('a2', 'r0', 'baz'), +('a3', 'r0', 'quux'), +('a4', 'r1', 'foo1'), +('a5', 'r1', 'bar1'), +('a6', 'r1', 'baz1'), +('a7', 'r1', 'quux1'); + +INSERT INTO listb (id, root_id, b_elem) VALUES +('b0', 'r0', 23), +('b1', 'r0', 13), +('b2', 'r0', 17), +('b3', 'r0', 11), +('b4', 'r1', 231), +('b5', 'r1', 131), +('b6', 'r1', 171), +('b7', 'r1', 111); + +GO diff --git a/testdata/mssql/graph.sql b/testdata/mssql/graph.sql new file mode 100644 index 00000000..bec895c5 --- /dev/null +++ b/testdata/mssql/graph.sql @@ -0,0 +1,23 @@ +CREATE TABLE graph_node ( + id INTEGER PRIMARY KEY +); + +CREATE TABLE graph_edge ( + id INTEGER PRIMARY KEY, + a INTEGER, + b INTEGER +); + +INSERT INTO graph_node (id) VALUES +('1'), +('2'), +('3'), +('4'); + +INSERT INTO graph_edge (id, a, b) VALUES +('12', '1', '2'), +('13', '1', '3'), +('24', '2', '4'), +('34', '3', '4'); + +GO diff --git a/testdata/mssql/interfaces.sql b/testdata/mssql/interfaces.sql new file mode 100644 index 00000000..11f32cc6 --- /dev/null +++ b/testdata/mssql/interfaces.sql @@ -0,0 +1,39 @@ +CREATE TABLE entities ( + id VARCHAR(100) PRIMARY KEY, + entity_type INTEGER NOT NULL, + title VARCHAR(100), + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100), + film_rating VARCHAR(100), + film_label INTEGER, + series_number_of_episodes INTEGER, + series_label VARCHAR(100), + image_url VARCHAR(100), + hidden_image_url VARCHAR(100) +); + +CREATE TABLE episodes ( + id VARCHAR(100) PRIMARY KEY, + series_id VARCHAR(100) NOT NULL, + title VARCHAR(100), + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100) +); + +INSERT INTO entities (id, entity_type, title, synopsis_short, synopsis_long, film_rating, film_label, series_number_of_episodes, series_label, image_url, hidden_image_url) VALUES +('1', 1, 'Film 1', 'Short film 1', 'Long film 1', 'PG', 1, NULL, NULL, 'http://www.example.com/film1.jpg', NULL), +('2', 1, 'Film 2', 'Short film 2', 'Long film 2', 'U', 2, NULL, NULL, 'http://www.example.com/film2.jpg', NULL), +('3', 1, 'Film 3', 'Short film 3', 'Long film 3', '15', 3, NULL, NULL, 'http://www.example.com/film3.jpg', NULL), +('4', 2, 'Series 1', 'Short series 1', 'Long series 1', NULL, NULL, 5, 'One', NULL, 'hidden_series1.jpg'), +('5', 2, 'Series 2', 'Short series 2', 'Long series 2', NULL, NULL, 6, 'Two', NULL, 'hidden_series2.jpg'), +('6', 2, 'Series 3', 'Short series 3', 'Long series 3', NULL, NULL, 7, 'Three', NULL, 'hidden_series3.jpg'); + +INSERT INTO episodes (id, series_id, title, synopsis_short, synopsis_long) VALUES +('1', '4', 'S1E1', 'Short S1E1', 'Long S1E1'), +('2', '4', 'S1E2', 'Short S1E2', 'Long S1E2'), +('3', '5', 'S2E1', 'Short S2E1', 'Long S2E1'), +('4', '5', 'S2E2', 'Short S2E2', 'Long S2E2'), +('5', '6', 'S3E1', 'Short S3E1', 'Long S3E1'), +('6', '6', 'S3E2', 'Short S3E2', 'Long S3E2'); + +GO diff --git a/testdata/mssql/jsonb.sql b/testdata/mssql/jsonb.sql new file mode 100644 index 00000000..dde19bae --- /dev/null +++ b/testdata/mssql/jsonb.sql @@ -0,0 +1,11 @@ +CREATE TABLE records ( + id Integer PRIMARY KEY, + record NVARCHAR(500) CHECK (ISJSON(record) = 1) +); + +INSERT INTO records (id, record) VALUES +('1', '{"bool":true,"int":1,"float":1.3,"string":"foo","id":"Foo","array":[1,2,3],"choice":"ONE","object":{"id":"obj0","aField":27},"children":[{"id":"a0","aField":11},{"id":"b0","bField":"wibble"}]}'), +('2', '{"bool":false,"int":2,"float":2.4,"string":"bar","id":"Bar","array":[4,5,6],"choice":"TWO","object":{"id":"obj1","aField":28},"children":[{"id":"a1","aField":12},{"id":"b1","bField":"wobble"}]}'), +('3', '{"bool":true,"int":3,"float":3.5,"string":"baz","id":"Baz","array":[7,8,9],"choice":"THREE","object":{"id":"obj2","aField":29},"children":[{"id":"a2","aField":13},{"id":"b2","bField":"quux"}]}'); + +GO diff --git a/testdata/mssql/like.sql b/testdata/mssql/like.sql new file mode 100644 index 00000000..b5d7ea62 --- /dev/null +++ b/testdata/mssql/like.sql @@ -0,0 +1,11 @@ +CREATE TABLE likes ( + id INTEGER PRIMARY KEY, + notnullable VARCHAR(100) NOT NULL, + nullable VARCHAR(100) +); + +INSERT INTO likes (id, notnullable, nullable) VALUES +(1, 'foo', NULL), +(2, 'bar', 'baz'); + +GO diff --git a/testdata/mssql/movies.sql b/testdata/mssql/movies.sql new file mode 100644 index 00000000..810bceca --- /dev/null +++ b/testdata/mssql/movies.sql @@ -0,0 +1,46 @@ +DROP TABLE IF EXISTS movies; + +CREATE TABLE movies ( + id VARCHAR(36) PRIMARY KEY, + title VARCHAR(100) NOT NULL, + genre INTEGER NOT NULL, + releasedate DATE NOT NULL, + showtime TIME NOT NULL, + nextshowing DATETIMEOFFSET(7) NOT NULL, + duration INTEGER NOT NULL, + categories VARCHAR(100) CHECK (ISJSON(categories) = 1) NOT NULL, + features VARCHAR(100) CHECK (ISJSON(features) = 1) NOT NULL, + tags INTEGER NOT NULL +); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('6a7837fc-b463-4d32-b628-0f4b3065cb21', 'Celine et Julie Vont en Bateau', '1', '1974-10-07', '19:35:00', '2020-05-22 19:35:00 +00:00', 12300000, '["drama","comedy"]', '["hd","hls"]', '1'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('11daf8c0-11c3-4453-bfe1-cb6e6e2f9115', 'Duelle', '1', '1975-09-15', '19:20:00', '2020-05-27 19:20:00 +00:00', 7260000, '["drama"]', '["hd"]', '1'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('aea9756f-621b-42d5-b130-71f3916c4ba3', 'L''Amour fou', '1', '1969-01-15', '21:00:00', '2020-05-27 21:00:00 +00:00', 15120000, '["drama"]', '["hd"]', '2'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('2ddb041f-86c2-4bd3-848c-990a3862634e', 'Last Year at Marienbad', '1', '1961-06-25', '20:30:00', '2020-05-26 20:30:00 +00:00', 5640000, '["drama"]', '["hd"]', '5'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('8ae5b13b-044c-4ff0-8b71-ccdb7d77cd88', 'Zazie dans le Métro', '3', '1960-10-28', '20:15:00', '2020-05-25 20:15:00 +00:00', 5340000, '["drama", "comedy"]', '["hd"]', '3'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('9dce9deb-9188-4cc2-9685-9842b8abdd34', 'Alphaville', '2', '1965-05-05', '19:45:00', '2020-05-19 19:45:00 +00:00', 5940000, '["drama", "science fiction"]', '["hd"]', '4'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('1bf00ac6-91ab-4e51-b686-3fd5e2324077', 'Stalker', '1', '1979-05-13', '15:30:00', '2020-05-19 15:30:00 +00:00', 9660000, '["drama", "science fiction"]', '["hd"]', '7'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('6a878e06-6563-4a0c-acd9-d28dcfb2e91a', 'Weekend', '3', '1967-12-29', '22:30:00', '2020-05-19 22:30:00 +00:00', 6300000, '["drama", "comedy"]', '["hd"]', '2'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('2a40415c-ea6a-413f-bbef-a80ae280c4ff', 'Daisies', '3', '1966-12-30', '21:30:00', '2020-05-15 21:30:00 +00:00', 4560000, '["drama", "comedy"]', '["hd"]', '6'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('2f6dcb0a-4122-4a21-a1c6-534744dd6b85', 'Le Pont du Nord', '1', '1982-01-13', '20:45:00', '2020-05-11 20:45:00 +00:00', 7620000, '["drama"]', '["hd"]', '3'); + +GO diff --git a/testdata/mssql/mutation.sql b/testdata/mssql/mutation.sql new file mode 100644 index 00000000..e5e981f4 --- /dev/null +++ b/testdata/mssql/mutation.sql @@ -0,0 +1,4 @@ +-- A sequence to test out inserting into a table. +CREATE SEQUENCE city_id START WITH 5000; + +GO diff --git a/testdata/mssql/projection.sql b/testdata/mssql/projection.sql new file mode 100644 index 00000000..9bbcffd6 --- /dev/null +++ b/testdata/mssql/projection.sql @@ -0,0 +1,36 @@ +CREATE TABLE level0 ( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE level1 ( + id VARCHAR(100) PRIMARY KEY, + level0_id VARCHAR(100) +); + +CREATE TABLE level2 ( + id VARCHAR(100) PRIMARY KEY, + level1_id VARCHAR(100), + attr BIT +); + +INSERT INTO level0 (id) VALUES +('00'), +('01'); + +INSERT INTO level1 (id, level0_id) VALUES +('10', '00'), +('11', '00'), +('12', '01'), +('13', '01'); + +INSERT INTO level2 (id, level1_id, attr) VALUES +('20', '10', 0), +('21', '10', 0), +('22', '11', 0), +('23', '11', 0), +('24', '12', 1), +('25', '12', 0), +('26', '13', 0), +('27', '13', 0); + +GO diff --git a/testdata/mssql/recursive-interfaces.sql b/testdata/mssql/recursive-interfaces.sql new file mode 100644 index 00000000..1b753263 --- /dev/null +++ b/testdata/mssql/recursive-interfaces.sql @@ -0,0 +1,19 @@ +CREATE TABLE recursive_interface_items ( + id VARCHAR(100) PRIMARY KEY, + item_type INTEGER NOT NULL +); + +CREATE TABLE recursive_interface_next_items ( + id VARCHAR(100) PRIMARY KEY, + next_item VARCHAR(100) +); + +INSERT INTO recursive_interface_items (id, item_type) VALUES +('1', '1'), +('2', '2'); + +INSERT INTO recursive_interface_next_items (id, next_item) VALUES +('1', '2'), +('2', '1'); + +GO diff --git a/testdata/mssql/sibling-lists.sql b/testdata/mssql/sibling-lists.sql new file mode 100644 index 00000000..5759ef48 --- /dev/null +++ b/testdata/mssql/sibling-lists.sql @@ -0,0 +1,39 @@ +CREATE TABLE seq_scan_a +( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE seq_scan_b +( + id VARCHAR(100) PRIMARY KEY, + a_id VARCHAR(100) NOT NULL +); + +CREATE INDEX seq_scan_b_a_id_idx ON seq_scan_b(a_id); + +CREATE TABLE seq_scan_c +( + id VARCHAR(100) PRIMARY KEY, + b_id VARCHAR(100) NOT NULL, + name_c VARCHAR(100) NOT NULL +); + +CREATE INDEX seq_scan_c_b_id_idx ON seq_scan_c(b_id); + +CREATE TABLE seq_scan_d +( + id VARCHAR(100) PRIMARY KEY, + b_id VARCHAR(100) NOT NULL, + name_d VARCHAR(100) NOT NULL +); + +CREATE INDEX seq_scan_d_b_id_idx ON seq_scan_d(b_id); + +INSERT INTO seq_scan_a(id) VALUES('id_a_1'); + +INSERT INTO seq_scan_b(id, a_id) VALUES('id_b_1', 'id_a_1'); + +INSERT INTO seq_scan_c(id, b_id, name_c) VALUES('id_c_1', 'id_b_1', 'name_c'); +INSERT INTO seq_scan_d(id, b_id, name_d) VALUES('id_d_1', 'id_b_1', 'name_d'); + +GO diff --git a/testdata/mssql/tree.sql b/testdata/mssql/tree.sql new file mode 100644 index 00000000..094cd429 --- /dev/null +++ b/testdata/mssql/tree.sql @@ -0,0 +1,16 @@ +CREATE TABLE bintree ( + id INTEGER PRIMARY KEY, + left_child INTEGER, + right_child INTEGER +); + +INSERT INTO bintree (id, left_child, right_child) VALUES +(0, 1, 2), +(1, 3, 4), +(2, 5, 6), +(3, NULL, NULL), +(4, NULL, NULL), +(5, NULL, NULL), +(6, NULL, NULL); + +GO diff --git a/testdata/mssql/unions.sql b/testdata/mssql/unions.sql new file mode 100644 index 00000000..209b3eb6 --- /dev/null +++ b/testdata/mssql/unions.sql @@ -0,0 +1,12 @@ +CREATE TABLE collections ( + id VARCHAR(100) PRIMARY KEY, + item_type VARCHAR(100) NOT NULL, + itema VARCHAR(100), + itemb VARCHAR(100) +); + +INSERT INTO collections (id, item_type, itema, itemb) VALUES +('1', 'ItemA', 'A', NULL), +('2', 'ItemB', NULL, 'B'); + +GO diff --git a/testdata/mssql/world.sql b/testdata/mssql/world.sql new file mode 100644 index 00000000..f0ba316e --- /dev/null +++ b/testdata/mssql/world.sql @@ -0,0 +1,5371 @@ +CREATE TABLE city ( + id integer NOT NULL, + name nvarchar(100) NOT NULL, + countrycode varchar(3) NOT NULL, + district nvarchar(100) NOT NULL, + population integer NOT NULL +); + +CREATE TABLE country ( + code varchar(3) NOT NULL, + name nvarchar(100) NOT NULL, + continent nvarchar(100) NOT NULL, + region nvarchar(100) NOT NULL, + surfacearea real NOT NULL, + indepyear smallint, + population integer NOT NULL, + lifeexpectancy real, + gnp numeric(10,2), + gnpold numeric(10,2), + localname nvarchar(100) NOT NULL, + governmentform nvarchar(100) NOT NULL, + headofstate nvarchar(100), + capital integer, + code2 varchar(2) NOT NULL +); + +CREATE TABLE countrylanguage ( + countrycode varchar(3) NOT NULL, + language nvarchar(100) NOT NULL, + isofficial bit NOT NULL, + percentage real NOT NULL +); + +INSERT INTO city (id, name, countrycode, district, population) VALUES +('1', 'Kabul', 'AFG', 'Kabol', '1780000'), +('2', 'Qandahar', 'AFG', 'Qandahar', '237500'), +('3', 'Herat', 'AFG', 'Herat', '186800'), +('4', 'Mazar-e-Sharif', 'AFG', 'Balkh', '127800'), +('5', 'Amsterdam', 'NLD', 'Noord-Holland', '731200'), +('6', 'Rotterdam', 'NLD', 'Zuid-Holland', '593321'), +('7', 'Haag', 'NLD', 'Zuid-Holland', '440900'), +('8', 'Utrecht', 'NLD', 'Utrecht', '234323'), +('9', 'Eindhoven', 'NLD', 'Noord-Brabant', '201843'), +('10', 'Tilburg', 'NLD', 'Noord-Brabant', '193238'), +('11', 'Groningen', 'NLD', 'Groningen', '172701'), +('12', 'Breda', 'NLD', 'Noord-Brabant', '160398'), +('13', 'Apeldoorn', 'NLD', 'Gelderland', '153491'), +('14', 'Nijmegen', 'NLD', 'Gelderland', '152463'), +('15', 'Enschede', 'NLD', 'Overijssel', '149544'), +('16', 'Haarlem', 'NLD', 'Noord-Holland', '148772'), +('17', 'Almere', 'NLD', 'Flevoland', '142465'), +('18', 'Arnhem', 'NLD', 'Gelderland', '138020'), +('19', 'Zaanstad', 'NLD', 'Noord-Holland', '135621'), +('20', '´s-Hertogenbosch', 'NLD', 'Noord-Brabant', '129170'), +('21', 'Amersfoort', 'NLD', 'Utrecht', '126270'), +('22', 'Maastricht', 'NLD', 'Limburg', '122087'), +('23', 'Dordrecht', 'NLD', 'Zuid-Holland', '119811'), +('24', 'Leiden', 'NLD', 'Zuid-Holland', '117196'), +('25', 'Haarlemmermeer', 'NLD', 'Noord-Holland', '110722'), +('26', 'Zoetermeer', 'NLD', 'Zuid-Holland', '110214'), +('27', 'Emmen', 'NLD', 'Drenthe', '105853'), +('28', 'Zwolle', 'NLD', 'Overijssel', '105819'), +('29', 'Ede', 'NLD', 'Gelderland', '101574'), +('30', 'Delft', 'NLD', 'Zuid-Holland', '95268'), +('31', 'Heerlen', 'NLD', 'Limburg', '95052'), +('32', 'Alkmaar', 'NLD', 'Noord-Holland', '92713'), +('33', 'Willemstad', 'ANT', 'Curaçao', '2345'), +('34', 'Tirana', 'ALB', 'Tirana', '270000'), +('35', 'Alger', 'DZA', 'Alger', '2168000'), +('36', 'Oran', 'DZA', 'Oran', '609823'), +('37', 'Constantine', 'DZA', 'Constantine', '443727'), +('38', 'Annaba', 'DZA', 'Annaba', '222518'), +('39', 'Batna', 'DZA', 'Batna', '183377'), +('40', 'Sétif', 'DZA', 'Sétif', '179055'), +('41', 'Sidi Bel Abbčs', 'DZA', 'Sidi Bel Abbčs', '153106'), +('42', 'Skikda', 'DZA', 'Skikda', '128747'), +('43', 'Biskra', 'DZA', 'Biskra', '128281'), +('44', 'Blida (el-Boulaida)', 'DZA', 'Blida', '127284'), +('45', 'Béjaďa', 'DZA', 'Béjaďa', '117162'), +('46', 'Mostaganem', 'DZA', 'Mostaganem', '115212'), +('47', 'Tébessa', 'DZA', 'Tébessa', '112007'), +('48', 'Tlemcen (Tilimsen)', 'DZA', 'Tlemcen', '110242'), +('49', 'Béchar', 'DZA', 'Béchar', '107311'), +('50', 'Tiaret', 'DZA', 'Tiaret', '100118'), +('51', 'Ech-Chleff (el-Asnam)', 'DZA', 'Chlef', '96794'), +('52', 'Ghardaďa', 'DZA', 'Ghardaďa', '89415'), +('53', 'Tafuna', 'ASM', 'Tutuila', '5200'), +('54', 'Fagatogo', 'ASM', 'Tutuila', '2323'), +('55', 'Andorra la Vella', 'AND', 'Andorra la Vella', '21189'), +('56', 'Luanda', 'AGO', 'Luanda', '2022000'), +('57', 'Huambo', 'AGO', 'Huambo', '163100'), +('58', 'Lobito', 'AGO', 'Benguela', '130000'), +('59', 'Benguela', 'AGO', 'Benguela', '128300'), +('60', 'Namibe', 'AGO', 'Namibe', '118200'), +('61', 'South Hill', 'AIA', '–', '961'), +('62', 'The Valley', 'AIA', '–', '595'), +('63', 'Saint John´s', 'ATG', 'St John', '24000'), +('64', 'Dubai', 'ARE', 'Dubai', '669181'), +('65', 'Abu Dhabi', 'ARE', 'Abu Dhabi', '398695'), +('66', 'Sharja', 'ARE', 'Sharja', '320095'), +('67', 'al-Ayn', 'ARE', 'Abu Dhabi', '225970'), +('68', 'Ajman', 'ARE', 'Ajman', '114395'), +('69', 'Buenos Aires', 'ARG', 'Distrito Federal', '2982146'), +('70', 'La Matanza', 'ARG', 'Buenos Aires', '1266461'), +('71', 'Córdoba', 'ARG', 'Córdoba', '1157507'), +('72', 'Rosario', 'ARG', 'Santa Fé', '907718'), +('73', 'Lomas de Zamora', 'ARG', 'Buenos Aires', '622013'), +('74', 'Quilmes', 'ARG', 'Buenos Aires', '559249'), +('75', 'Almirante Brown', 'ARG', 'Buenos Aires', '538918'), +('76', 'La Plata', 'ARG', 'Buenos Aires', '521936'), +('77', 'Mar del Plata', 'ARG', 'Buenos Aires', '512880'), +('78', 'San Miguel de Tucumán', 'ARG', 'Tucumán', '470809'), +('79', 'Lanús', 'ARG', 'Buenos Aires', '469735'), +('80', 'Merlo', 'ARG', 'Buenos Aires', '463846'), +('81', 'General San Martín', 'ARG', 'Buenos Aires', '422542'), +('82', 'Salta', 'ARG', 'Salta', '367550'), +('83', 'Moreno', 'ARG', 'Buenos Aires', '356993'), +('84', 'Santa Fé', 'ARG', 'Santa Fé', '353063'), +('85', 'Avellaneda', 'ARG', 'Buenos Aires', '353046'), +('86', 'Tres de Febrero', 'ARG', 'Buenos Aires', '352311'), +('87', 'Morón', 'ARG', 'Buenos Aires', '349246'), +('88', 'Florencio Varela', 'ARG', 'Buenos Aires', '315432'), +('89', 'San Isidro', 'ARG', 'Buenos Aires', '306341'), +('90', 'Tigre', 'ARG', 'Buenos Aires', '296226'), +('91', 'Malvinas Argentinas', 'ARG', 'Buenos Aires', '290335'), +('92', 'Vicente López', 'ARG', 'Buenos Aires', '288341'), +('93', 'Berazategui', 'ARG', 'Buenos Aires', '276916'), +('94', 'Corrientes', 'ARG', 'Corrientes', '258103'), +('95', 'San Miguel', 'ARG', 'Buenos Aires', '248700'), +('96', 'Bahía Blanca', 'ARG', 'Buenos Aires', '239810'), +('97', 'Esteban Echeverría', 'ARG', 'Buenos Aires', '235760'), +('98', 'Resistencia', 'ARG', 'Chaco', '229212'), +('99', 'José C. Paz', 'ARG', 'Buenos Aires', '221754'), +('100', 'Paraná', 'ARG', 'Entre Rios', '207041'), +('101', 'Godoy Cruz', 'ARG', 'Mendoza', '206998'), +('102', 'Posadas', 'ARG', 'Misiones', '201273'), +('103', 'Guaymallén', 'ARG', 'Mendoza', '200595'), +('104', 'Santiago del Estero', 'ARG', 'Santiago del Estero', '189947'), +('105', 'San Salvador de Jujuy', 'ARG', 'Jujuy', '178748'), +('106', 'Hurlingham', 'ARG', 'Buenos Aires', '170028'), +('107', 'Neuquén', 'ARG', 'Neuquén', '167296'), +('108', 'Ituzaingó', 'ARG', 'Buenos Aires', '158197'), +('109', 'San Fernando', 'ARG', 'Buenos Aires', '153036'), +('110', 'Formosa', 'ARG', 'Formosa', '147636'), +('111', 'Las Heras', 'ARG', 'Mendoza', '145823'), +('112', 'La Rioja', 'ARG', 'La Rioja', '138117'), +('113', 'San Fernando del Valle de Cata', 'ARG', 'Catamarca', '134935'), +('114', 'Río Cuarto', 'ARG', 'Córdoba', '134355'), +('115', 'Comodoro Rivadavia', 'ARG', 'Chubut', '124104'), +('116', 'Mendoza', 'ARG', 'Mendoza', '123027'), +('117', 'San Nicolás de los Arroyos', 'ARG', 'Buenos Aires', '119302'), +('118', 'San Juan', 'ARG', 'San Juan', '119152'), +('119', 'Escobar', 'ARG', 'Buenos Aires', '116675'), +('120', 'Concordia', 'ARG', 'Entre Rios', '116485'), +('121', 'Pilar', 'ARG', 'Buenos Aires', '113428'), +('122', 'San Luis', 'ARG', 'San Luis', '110136'), +('123', 'Ezeiza', 'ARG', 'Buenos Aires', '99578'), +('124', 'San Rafael', 'ARG', 'Mendoza', '94651'), +('125', 'Tandil', 'ARG', 'Buenos Aires', '91101'), +('126', 'Yerevan', 'ARM', 'Yerevan', '1248700'), +('127', 'Gjumri', 'ARM', 'Širak', '211700'), +('128', 'Vanadzor', 'ARM', 'Lori', '172700'), +('129', 'Oranjestad', 'ABW', '–', '29034'), +('130', 'Sydney', 'AUS', 'New South Wales', '3276207'), +('131', 'Melbourne', 'AUS', 'Victoria', '2865329'), +('132', 'Brisbane', 'AUS', 'Queensland', '1291117'), +('133', 'Perth', 'AUS', 'West Australia', '1096829'), +('134', 'Adelaide', 'AUS', 'South Australia', '978100'), +('135', 'Canberra', 'AUS', 'Capital Region', '322723'), +('136', 'Gold Coast', 'AUS', 'Queensland', '311932'), +('137', 'Newcastle', 'AUS', 'New South Wales', '270324'), +('138', 'Central Coast', 'AUS', 'New South Wales', '227657'), +('139', 'Wollongong', 'AUS', 'New South Wales', '219761'), +('140', 'Hobart', 'AUS', 'Tasmania', '126118'), +('141', 'Geelong', 'AUS', 'Victoria', '125382'), +('142', 'Townsville', 'AUS', 'Queensland', '109914'), +('143', 'Cairns', 'AUS', 'Queensland', '92273'), +('144', 'Baku', 'AZE', 'Baki', '1787800'), +('145', 'Gäncä', 'AZE', 'Gäncä', '299300'), +('146', 'Sumqayit', 'AZE', 'Sumqayit', '283000'), +('147', 'Mingäçevir', 'AZE', 'Mingäçevir', '93900'), +('148', 'Nassau', 'BHS', 'New Providence', '172000'), +('149', 'al-Manama', 'BHR', 'al-Manama', '148000'), +('150', 'Dhaka', 'BGD', 'Dhaka', '3612850'), +('151', 'Chittagong', 'BGD', 'Chittagong', '1392860'), +('152', 'Khulna', 'BGD', 'Khulna', '663340'), +('153', 'Rajshahi', 'BGD', 'Rajshahi', '294056'), +('154', 'Narayanganj', 'BGD', 'Dhaka', '202134'), +('155', 'Rangpur', 'BGD', 'Rajshahi', '191398'), +('156', 'Mymensingh', 'BGD', 'Dhaka', '188713'), +('157', 'Barisal', 'BGD', 'Barisal', '170232'), +('158', 'Tungi', 'BGD', 'Dhaka', '168702'), +('159', 'Jessore', 'BGD', 'Khulna', '139710'), +('160', 'Comilla', 'BGD', 'Chittagong', '135313'), +('161', 'Nawabganj', 'BGD', 'Rajshahi', '130577'), +('162', 'Dinajpur', 'BGD', 'Rajshahi', '127815'), +('163', 'Bogra', 'BGD', 'Rajshahi', '120170'), +('164', 'Sylhet', 'BGD', 'Sylhet', '117396'), +('165', 'Brahmanbaria', 'BGD', 'Chittagong', '109032'), +('166', 'Tangail', 'BGD', 'Dhaka', '106004'), +('167', 'Jamalpur', 'BGD', 'Dhaka', '103556'), +('168', 'Pabna', 'BGD', 'Rajshahi', '103277'), +('169', 'Naogaon', 'BGD', 'Rajshahi', '101266'), +('170', 'Sirajganj', 'BGD', 'Rajshahi', '99669'), +('171', 'Narsinghdi', 'BGD', 'Dhaka', '98342'), +('172', 'Saidpur', 'BGD', 'Rajshahi', '96777'), +('173', 'Gazipur', 'BGD', 'Dhaka', '96717'), +('174', 'Bridgetown', 'BRB', 'St Michael', '6070'), +('175', 'Antwerpen', 'BEL', 'Antwerpen', '446525'), +('176', 'Gent', 'BEL', 'East Flanderi', '224180'), +('177', 'Charleroi', 'BEL', 'Hainaut', '200827'), +('178', 'Ličge', 'BEL', 'Ličge', '185639'), +('179', 'Bruxelles [Brussel]', 'BEL', 'Bryssel', '133859'), +('180', 'Brugge', 'BEL', 'West Flanderi', '116246'), +('181', 'Schaerbeek', 'BEL', 'Bryssel', '105692'), +('182', 'Namur', 'BEL', 'Namur', '105419'), +('183', 'Mons', 'BEL', 'Hainaut', '90935'), +('184', 'Belize City', 'BLZ', 'Belize City', '55810'), +('185', 'Belmopan', 'BLZ', 'Cayo', '7105'), +('186', 'Cotonou', 'BEN', 'Atlantique', '536827'), +('187', 'Porto-Novo', 'BEN', 'Ouémé', '194000'), +('188', 'Djougou', 'BEN', 'Atacora', '134099'), +('189', 'Parakou', 'BEN', 'Borgou', '103577'), +('190', 'Saint George', 'BMU', 'Saint George´s', '1800'), +('191', 'Hamilton', 'BMU', 'Hamilton', '1200'), +('192', 'Thimphu', 'BTN', 'Thimphu', '22000'), +('193', 'Santa Cruz de la Sierra', 'BOL', 'Santa Cruz', '935361'), +('194', 'La Paz', 'BOL', 'La Paz', '758141'), +('195', 'El Alto', 'BOL', 'La Paz', '534466'), +('196', 'Cochabamba', 'BOL', 'Cochabamba', '482800'), +('197', 'Oruro', 'BOL', 'Oruro', '223553'), +('198', 'Sucre', 'BOL', 'Chuquisaca', '178426'), +('199', 'Potosí', 'BOL', 'Potosí', '140642'), +('200', 'Tarija', 'BOL', 'Tarija', '125255'), +('201', 'Sarajevo', 'BIH', 'Federaatio', '360000'), +('202', 'Banja Luka', 'BIH', 'Republika Srpska', '143079'), +('203', 'Zenica', 'BIH', 'Federaatio', '96027'), +('204', 'Gaborone', 'BWA', 'Gaborone', '213017'), +('205', 'Francistown', 'BWA', 'Francistown', '101805'), +('206', 'Săo Paulo', 'BRA', 'Săo Paulo', '9968485'), +('207', 'Rio de Janeiro', 'BRA', 'Rio de Janeiro', '5598953'), +('208', 'Salvador', 'BRA', 'Bahia', '2302832'), +('209', 'Belo Horizonte', 'BRA', 'Minas Gerais', '2139125'), +('210', 'Fortaleza', 'BRA', 'Ceará', '2097757'), +('211', 'Brasília', 'BRA', 'Distrito Federal', '1969868'), +('212', 'Curitiba', 'BRA', 'Paraná', '1584232'), +('213', 'Recife', 'BRA', 'Pernambuco', '1378087'), +('214', 'Porto Alegre', 'BRA', 'Rio Grande do Sul', '1314032'), +('215', 'Manaus', 'BRA', 'Amazonas', '1255049'), +('216', 'Belém', 'BRA', 'Pará', '1186926'), +('217', 'Guarulhos', 'BRA', 'Săo Paulo', '1095874'), +('218', 'Goiânia', 'BRA', 'Goiás', '1056330'), +('219', 'Campinas', 'BRA', 'Săo Paulo', '950043'), +('220', 'Săo Gonçalo', 'BRA', 'Rio de Janeiro', '869254'), +('221', 'Nova Iguaçu', 'BRA', 'Rio de Janeiro', '862225'), +('222', 'Săo Luís', 'BRA', 'Maranhăo', '837588'), +('223', 'Maceió', 'BRA', 'Alagoas', '786288'), +('224', 'Duque de Caxias', 'BRA', 'Rio de Janeiro', '746758'), +('225', 'Săo Bernardo do Campo', 'BRA', 'Săo Paulo', '723132'), +('226', 'Teresina', 'BRA', 'Piauí', '691942'), +('227', 'Natal', 'BRA', 'Rio Grande do Norte', '688955'), +('228', 'Osasco', 'BRA', 'Săo Paulo', '659604'), +('229', 'Campo Grande', 'BRA', 'Mato Grosso do Sul', '649593'), +('230', 'Santo André', 'BRA', 'Săo Paulo', '630073'), +('231', 'Joăo Pessoa', 'BRA', 'Paraíba', '584029'), +('232', 'Jaboatăo dos Guararapes', 'BRA', 'Pernambuco', '558680'), +('233', 'Contagem', 'BRA', 'Minas Gerais', '520801'), +('234', 'Săo José dos Campos', 'BRA', 'Săo Paulo', '515553'), +('235', 'Uberlândia', 'BRA', 'Minas Gerais', '487222'), +('236', 'Feira de Santana', 'BRA', 'Bahia', '479992'), +('237', 'Ribeirăo Preto', 'BRA', 'Săo Paulo', '473276'), +('238', 'Sorocaba', 'BRA', 'Săo Paulo', '466823'), +('239', 'Niterói', 'BRA', 'Rio de Janeiro', '459884'), +('240', 'Cuiabá', 'BRA', 'Mato Grosso', '453813'), +('241', 'Juiz de Fora', 'BRA', 'Minas Gerais', '450288'), +('242', 'Aracaju', 'BRA', 'Sergipe', '445555'), +('243', 'Săo Joăo de Meriti', 'BRA', 'Rio de Janeiro', '440052'), +('244', 'Londrina', 'BRA', 'Paraná', '432257'), +('245', 'Joinville', 'BRA', 'Santa Catarina', '428011'), +('246', 'Belford Roxo', 'BRA', 'Rio de Janeiro', '425194'), +('247', 'Santos', 'BRA', 'Săo Paulo', '408748'), +('248', 'Ananindeua', 'BRA', 'Pará', '400940'), +('249', 'Campos dos Goytacazes', 'BRA', 'Rio de Janeiro', '398418'), +('250', 'Mauá', 'BRA', 'Săo Paulo', '375055'), +('251', 'Carapicuíba', 'BRA', 'Săo Paulo', '357552'), +('252', 'Olinda', 'BRA', 'Pernambuco', '354732'), +('253', 'Campina Grande', 'BRA', 'Paraíba', '352497'), +('254', 'Săo José do Rio Preto', 'BRA', 'Săo Paulo', '351944'), +('255', 'Caxias do Sul', 'BRA', 'Rio Grande do Sul', '349581'), +('256', 'Moji das Cruzes', 'BRA', 'Săo Paulo', '339194'), +('257', 'Diadema', 'BRA', 'Săo Paulo', '335078'), +('258', 'Aparecida de Goiânia', 'BRA', 'Goiás', '324662'), +('259', 'Piracicaba', 'BRA', 'Săo Paulo', '319104'), +('260', 'Cariacica', 'BRA', 'Espírito Santo', '319033'), +('261', 'Vila Velha', 'BRA', 'Espírito Santo', '318758'), +('262', 'Pelotas', 'BRA', 'Rio Grande do Sul', '315415'), +('263', 'Bauru', 'BRA', 'Săo Paulo', '313670'), +('264', 'Porto Velho', 'BRA', 'Rondônia', '309750'), +('265', 'Serra', 'BRA', 'Espírito Santo', '302666'), +('266', 'Betim', 'BRA', 'Minas Gerais', '302108'), +('267', 'Jundíaí', 'BRA', 'Săo Paulo', '296127'), +('268', 'Canoas', 'BRA', 'Rio Grande do Sul', '294125'), +('269', 'Franca', 'BRA', 'Săo Paulo', '290139'), +('270', 'Săo Vicente', 'BRA', 'Săo Paulo', '286848'), +('271', 'Maringá', 'BRA', 'Paraná', '286461'), +('272', 'Montes Claros', 'BRA', 'Minas Gerais', '286058'), +('273', 'Anápolis', 'BRA', 'Goiás', '282197'), +('274', 'Florianópolis', 'BRA', 'Santa Catarina', '281928'), +('275', 'Petrópolis', 'BRA', 'Rio de Janeiro', '279183'), +('276', 'Itaquaquecetuba', 'BRA', 'Săo Paulo', '270874'), +('277', 'Vitória', 'BRA', 'Espírito Santo', '270626'), +('278', 'Ponta Grossa', 'BRA', 'Paraná', '268013'), +('279', 'Rio Branco', 'BRA', 'Acre', '259537'), +('280', 'Foz do Iguaçu', 'BRA', 'Paraná', '259425'), +('281', 'Macapá', 'BRA', 'Amapá', '256033'), +('282', 'Ilhéus', 'BRA', 'Bahia', '254970'), +('283', 'Vitória da Conquista', 'BRA', 'Bahia', '253587'), +('284', 'Uberaba', 'BRA', 'Minas Gerais', '249225'), +('285', 'Paulista', 'BRA', 'Pernambuco', '248473'), +('286', 'Limeira', 'BRA', 'Săo Paulo', '245497'), +('287', 'Blumenau', 'BRA', 'Santa Catarina', '244379'), +('288', 'Caruaru', 'BRA', 'Pernambuco', '244247'), +('289', 'Santarém', 'BRA', 'Pará', '241771'), +('290', 'Volta Redonda', 'BRA', 'Rio de Janeiro', '240315'), +('291', 'Novo Hamburgo', 'BRA', 'Rio Grande do Sul', '239940'), +('292', 'Caucaia', 'BRA', 'Ceará', '238738'), +('293', 'Santa Maria', 'BRA', 'Rio Grande do Sul', '238473'), +('294', 'Cascavel', 'BRA', 'Paraná', '237510'), +('295', 'Guarujá', 'BRA', 'Săo Paulo', '237206'), +('296', 'Ribeirăo das Neves', 'BRA', 'Minas Gerais', '232685'), +('297', 'Governador Valadares', 'BRA', 'Minas Gerais', '231724'), +('298', 'Taubaté', 'BRA', 'Săo Paulo', '229130'), +('299', 'Imperatriz', 'BRA', 'Maranhăo', '224564'), +('300', 'Gravataí', 'BRA', 'Rio Grande do Sul', '223011'), +('301', 'Embu', 'BRA', 'Săo Paulo', '222223'), +('302', 'Mossoró', 'BRA', 'Rio Grande do Norte', '214901'), +('303', 'Várzea Grande', 'BRA', 'Mato Grosso', '214435'), +('304', 'Petrolina', 'BRA', 'Pernambuco', '210540'), +('305', 'Barueri', 'BRA', 'Săo Paulo', '208426'), +('306', 'Viamăo', 'BRA', 'Rio Grande do Sul', '207557'), +('307', 'Ipatinga', 'BRA', 'Minas Gerais', '206338'), +('308', 'Juazeiro', 'BRA', 'Bahia', '201073'), +('309', 'Juazeiro do Norte', 'BRA', 'Ceará', '199636'), +('310', 'Taboăo da Serra', 'BRA', 'Săo Paulo', '197550'), +('311', 'Săo José dos Pinhais', 'BRA', 'Paraná', '196884'), +('312', 'Magé', 'BRA', 'Rio de Janeiro', '196147'), +('313', 'Suzano', 'BRA', 'Săo Paulo', '195434'), +('314', 'Săo Leopoldo', 'BRA', 'Rio Grande do Sul', '189258'), +('315', 'Marília', 'BRA', 'Săo Paulo', '188691'), +('316', 'Săo Carlos', 'BRA', 'Săo Paulo', '187122'), +('317', 'Sumaré', 'BRA', 'Săo Paulo', '186205'), +('318', 'Presidente Prudente', 'BRA', 'Săo Paulo', '185340'), +('319', 'Divinópolis', 'BRA', 'Minas Gerais', '185047'), +('320', 'Sete Lagoas', 'BRA', 'Minas Gerais', '182984'), +('321', 'Rio Grande', 'BRA', 'Rio Grande do Sul', '182222'), +('322', 'Itabuna', 'BRA', 'Bahia', '182148'), +('323', 'Jequié', 'BRA', 'Bahia', '179128'), +('324', 'Arapiraca', 'BRA', 'Alagoas', '178988'), +('325', 'Colombo', 'BRA', 'Paraná', '177764'), +('326', 'Americana', 'BRA', 'Săo Paulo', '177409'), +('327', 'Alvorada', 'BRA', 'Rio Grande do Sul', '175574'), +('328', 'Araraquara', 'BRA', 'Săo Paulo', '174381'), +('329', 'Itaboraí', 'BRA', 'Rio de Janeiro', '173977'), +('330', 'Santa Bárbara d´Oeste', 'BRA', 'Săo Paulo', '171657'), +('331', 'Nova Friburgo', 'BRA', 'Rio de Janeiro', '170697'), +('332', 'Jacareí', 'BRA', 'Săo Paulo', '170356'), +('333', 'Araçatuba', 'BRA', 'Săo Paulo', '169303'), +('334', 'Barra Mansa', 'BRA', 'Rio de Janeiro', '168953'), +('335', 'Praia Grande', 'BRA', 'Săo Paulo', '168434'), +('336', 'Marabá', 'BRA', 'Pará', '167795'), +('337', 'Criciúma', 'BRA', 'Santa Catarina', '167661'), +('338', 'Boa Vista', 'BRA', 'Roraima', '167185'), +('339', 'Passo Fundo', 'BRA', 'Rio Grande do Sul', '166343'), +('340', 'Dourados', 'BRA', 'Mato Grosso do Sul', '164716'), +('341', 'Santa Luzia', 'BRA', 'Minas Gerais', '164704'), +('342', 'Rio Claro', 'BRA', 'Săo Paulo', '163551'), +('343', 'Maracanaú', 'BRA', 'Ceará', '162022'), +('344', 'Guarapuava', 'BRA', 'Paraná', '160510'), +('345', 'Rondonópolis', 'BRA', 'Mato Grosso', '155115'), +('346', 'Săo José', 'BRA', 'Santa Catarina', '155105'), +('347', 'Cachoeiro de Itapemirim', 'BRA', 'Espírito Santo', '155024'), +('348', 'Nilópolis', 'BRA', 'Rio de Janeiro', '153383'), +('349', 'Itapevi', 'BRA', 'Săo Paulo', '150664'), +('350', 'Cabo de Santo Agostinho', 'BRA', 'Pernambuco', '149964'), +('351', 'Camaçari', 'BRA', 'Bahia', '149146'), +('352', 'Sobral', 'BRA', 'Ceará', '146005'), +('353', 'Itajaí', 'BRA', 'Santa Catarina', '145197'), +('354', 'Chapecó', 'BRA', 'Santa Catarina', '144158'), +('355', 'Cotia', 'BRA', 'Săo Paulo', '140042'), +('356', 'Lages', 'BRA', 'Santa Catarina', '139570'), +('357', 'Ferraz de Vasconcelos', 'BRA', 'Săo Paulo', '139283'), +('358', 'Indaiatuba', 'BRA', 'Săo Paulo', '135968'), +('359', 'Hortolândia', 'BRA', 'Săo Paulo', '135755'), +('360', 'Caxias', 'BRA', 'Maranhăo', '133980'), +('361', 'Săo Caetano do Sul', 'BRA', 'Săo Paulo', '133321'), +('362', 'Itu', 'BRA', 'Săo Paulo', '132736'), +('363', 'Nossa Senhora do Socorro', 'BRA', 'Sergipe', '131351'), +('364', 'Parnaíba', 'BRA', 'Piauí', '129756'), +('365', 'Poços de Caldas', 'BRA', 'Minas Gerais', '129683'), +('366', 'Teresópolis', 'BRA', 'Rio de Janeiro', '128079'), +('367', 'Barreiras', 'BRA', 'Bahia', '127801'), +('368', 'Castanhal', 'BRA', 'Pará', '127634'), +('369', 'Alagoinhas', 'BRA', 'Bahia', '126820'), +('370', 'Itapecerica da Serra', 'BRA', 'Săo Paulo', '126672'), +('371', 'Uruguaiana', 'BRA', 'Rio Grande do Sul', '126305'), +('372', 'Paranaguá', 'BRA', 'Paraná', '126076'), +('373', 'Ibirité', 'BRA', 'Minas Gerais', '125982'), +('374', 'Timon', 'BRA', 'Maranhăo', '125812'), +('375', 'Luziânia', 'BRA', 'Goiás', '125597'), +('376', 'Macaé', 'BRA', 'Rio de Janeiro', '125597'), +('377', 'Teófilo Otoni', 'BRA', 'Minas Gerais', '124489'), +('378', 'Moji-Guaçu', 'BRA', 'Săo Paulo', '123782'), +('379', 'Palmas', 'BRA', 'Tocantins', '121919'), +('380', 'Pindamonhangaba', 'BRA', 'Săo Paulo', '121904'), +('381', 'Francisco Morato', 'BRA', 'Săo Paulo', '121197'), +('382', 'Bagé', 'BRA', 'Rio Grande do Sul', '120793'), +('383', 'Sapucaia do Sul', 'BRA', 'Rio Grande do Sul', '120217'), +('384', 'Cabo Frio', 'BRA', 'Rio de Janeiro', '119503'), +('385', 'Itapetininga', 'BRA', 'Săo Paulo', '119391'), +('386', 'Patos de Minas', 'BRA', 'Minas Gerais', '119262'), +('387', 'Camaragibe', 'BRA', 'Pernambuco', '118968'), +('388', 'Bragança Paulista', 'BRA', 'Săo Paulo', '116929'), +('389', 'Queimados', 'BRA', 'Rio de Janeiro', '115020'), +('390', 'Araguaína', 'BRA', 'Tocantins', '114948'), +('391', 'Garanhuns', 'BRA', 'Pernambuco', '114603'), +('392', 'Vitória de Santo Antăo', 'BRA', 'Pernambuco', '113595'), +('393', 'Santa Rita', 'BRA', 'Paraíba', '113135'), +('394', 'Barbacena', 'BRA', 'Minas Gerais', '113079'), +('395', 'Abaetetuba', 'BRA', 'Pará', '111258'), +('396', 'Jaú', 'BRA', 'Săo Paulo', '109965'), +('397', 'Lauro de Freitas', 'BRA', 'Bahia', '109236'), +('398', 'Franco da Rocha', 'BRA', 'Săo Paulo', '108964'), +('399', 'Teixeira de Freitas', 'BRA', 'Bahia', '108441'), +('400', 'Varginha', 'BRA', 'Minas Gerais', '108314'), +('401', 'Ribeirăo Pires', 'BRA', 'Săo Paulo', '108121'), +('402', 'Sabará', 'BRA', 'Minas Gerais', '107781'), +('403', 'Catanduva', 'BRA', 'Săo Paulo', '107761'), +('404', 'Rio Verde', 'BRA', 'Goiás', '107755'), +('405', 'Botucatu', 'BRA', 'Săo Paulo', '107663'), +('406', 'Colatina', 'BRA', 'Espírito Santo', '107354'), +('407', 'Santa Cruz do Sul', 'BRA', 'Rio Grande do Sul', '106734'), +('408', 'Linhares', 'BRA', 'Espírito Santo', '106278'), +('409', 'Apucarana', 'BRA', 'Paraná', '105114'), +('410', 'Barretos', 'BRA', 'Săo Paulo', '104156'), +('411', 'Guaratinguetá', 'BRA', 'Săo Paulo', '103433'), +('412', 'Cachoeirinha', 'BRA', 'Rio Grande do Sul', '103240'), +('413', 'Codó', 'BRA', 'Maranhăo', '103153'), +('414', 'Jaraguá do Sul', 'BRA', 'Santa Catarina', '102580'), +('415', 'Cubatăo', 'BRA', 'Săo Paulo', '102372'), +('416', 'Itabira', 'BRA', 'Minas Gerais', '102217'), +('417', 'Itaituba', 'BRA', 'Pará', '101320'), +('418', 'Araras', 'BRA', 'Săo Paulo', '101046'), +('419', 'Resende', 'BRA', 'Rio de Janeiro', '100627'), +('420', 'Atibaia', 'BRA', 'Săo Paulo', '100356'), +('421', 'Pouso Alegre', 'BRA', 'Minas Gerais', '100028'), +('422', 'Toledo', 'BRA', 'Paraná', '99387'), +('423', 'Crato', 'BRA', 'Ceará', '98965'), +('424', 'Passos', 'BRA', 'Minas Gerais', '98570'), +('425', 'Araguari', 'BRA', 'Minas Gerais', '98399'), +('426', 'Săo José de Ribamar', 'BRA', 'Maranhăo', '98318'), +('427', 'Pinhais', 'BRA', 'Paraná', '98198'), +('428', 'Sertăozinho', 'BRA', 'Săo Paulo', '98140'), +('429', 'Conselheiro Lafaiete', 'BRA', 'Minas Gerais', '97507'), +('430', 'Paulo Afonso', 'BRA', 'Bahia', '97291'), +('431', 'Angra dos Reis', 'BRA', 'Rio de Janeiro', '96864'), +('432', 'Eunápolis', 'BRA', 'Bahia', '96610'), +('433', 'Salto', 'BRA', 'Săo Paulo', '96348'), +('434', 'Ourinhos', 'BRA', 'Săo Paulo', '96291'), +('435', 'Parnamirim', 'BRA', 'Rio Grande do Norte', '96210'), +('436', 'Jacobina', 'BRA', 'Bahia', '96131'), +('437', 'Coronel Fabriciano', 'BRA', 'Minas Gerais', '95933'), +('438', 'Birigui', 'BRA', 'Săo Paulo', '94685'), +('439', 'Tatuí', 'BRA', 'Săo Paulo', '93897'), +('440', 'Ji-Paraná', 'BRA', 'Rondônia', '93346'), +('441', 'Bacabal', 'BRA', 'Maranhăo', '93121'), +('442', 'Cametá', 'BRA', 'Pará', '92779'), +('443', 'Guaíba', 'BRA', 'Rio Grande do Sul', '92224'), +('444', 'Săo Lourenço da Mata', 'BRA', 'Pernambuco', '91999'), +('445', 'Santana do Livramento', 'BRA', 'Rio Grande do Sul', '91779'), +('446', 'Votorantim', 'BRA', 'Săo Paulo', '91777'), +('447', 'Campo Largo', 'BRA', 'Paraná', '91203'), +('448', 'Patos', 'BRA', 'Paraíba', '90519'), +('449', 'Ituiutaba', 'BRA', 'Minas Gerais', '90507'), +('450', 'Corumbá', 'BRA', 'Mato Grosso do Sul', '90111'), +('451', 'Palhoça', 'BRA', 'Santa Catarina', '89465'), +('452', 'Barra do Piraí', 'BRA', 'Rio de Janeiro', '89388'), +('453', 'Bento Gonçalves', 'BRA', 'Rio Grande do Sul', '89254'), +('454', 'Poá', 'BRA', 'Săo Paulo', '89236'), +('455', 'Águas Lindas de Goiás', 'BRA', 'Goiás', '89200'), +('456', 'London', 'GBR', 'England', '7285000'), +('457', 'Birmingham', 'GBR', 'England', '1013000'), +('458', 'Glasgow', 'GBR', 'Scotland', '619680'), +('459', 'Liverpool', 'GBR', 'England', '461000'), +('460', 'Edinburgh', 'GBR', 'Scotland', '450180'), +('461', 'Sheffield', 'GBR', 'England', '431607'), +('462', 'Manchester', 'GBR', 'England', '430000'), +('463', 'Leeds', 'GBR', 'England', '424194'), +('464', 'Bristol', 'GBR', 'England', '402000'), +('465', 'Cardiff', 'GBR', 'Wales', '321000'), +('466', 'Coventry', 'GBR', 'England', '304000'), +('467', 'Leicester', 'GBR', 'England', '294000'), +('468', 'Bradford', 'GBR', 'England', '289376'), +('469', 'Belfast', 'GBR', 'North Ireland', '287500'), +('470', 'Nottingham', 'GBR', 'England', '287000'), +('471', 'Kingston upon Hull', 'GBR', 'England', '262000'), +('472', 'Plymouth', 'GBR', 'England', '253000'), +('473', 'Stoke-on-Trent', 'GBR', 'England', '252000'), +('474', 'Wolverhampton', 'GBR', 'England', '242000'), +('475', 'Derby', 'GBR', 'England', '236000'), +('476', 'Swansea', 'GBR', 'Wales', '230000'), +('477', 'Southampton', 'GBR', 'England', '216000'), +('478', 'Aberdeen', 'GBR', 'Scotland', '213070'), +('479', 'Northampton', 'GBR', 'England', '196000'), +('480', 'Dudley', 'GBR', 'England', '192171'), +('481', 'Portsmouth', 'GBR', 'England', '190000'), +('482', 'Newcastle upon Tyne', 'GBR', 'England', '189150'), +('483', 'Sunderland', 'GBR', 'England', '183310'), +('484', 'Luton', 'GBR', 'England', '183000'), +('485', 'Swindon', 'GBR', 'England', '180000'), +('486', 'Southend-on-Sea', 'GBR', 'England', '176000'), +('487', 'Walsall', 'GBR', 'England', '174739'), +('488', 'Bournemouth', 'GBR', 'England', '162000'), +('489', 'Peterborough', 'GBR', 'England', '156000'), +('490', 'Brighton', 'GBR', 'England', '156124'), +('491', 'Blackpool', 'GBR', 'England', '151000'), +('492', 'Dundee', 'GBR', 'Scotland', '146690'), +('493', 'West Bromwich', 'GBR', 'England', '146386'), +('494', 'Reading', 'GBR', 'England', '148000'), +('495', 'Oldbury/Smethwick (Warley)', 'GBR', 'England', '145542'), +('496', 'Middlesbrough', 'GBR', 'England', '145000'), +('497', 'Huddersfield', 'GBR', 'England', '143726'), +('498', 'Oxford', 'GBR', 'England', '144000'), +('499', 'Poole', 'GBR', 'England', '141000'), +('500', 'Bolton', 'GBR', 'England', '139020'), +('501', 'Blackburn', 'GBR', 'England', '140000'), +('502', 'Newport', 'GBR', 'Wales', '139000'), +('503', 'Preston', 'GBR', 'England', '135000'), +('504', 'Stockport', 'GBR', 'England', '132813'), +('505', 'Norwich', 'GBR', 'England', '124000'), +('506', 'Rotherham', 'GBR', 'England', '121380'), +('507', 'Cambridge', 'GBR', 'England', '121000'), +('508', 'Watford', 'GBR', 'England', '113080'), +('509', 'Ipswich', 'GBR', 'England', '114000'), +('510', 'Slough', 'GBR', 'England', '112000'), +('511', 'Exeter', 'GBR', 'England', '111000'), +('512', 'Cheltenham', 'GBR', 'England', '106000'), +('513', 'Gloucester', 'GBR', 'England', '107000'), +('514', 'Saint Helens', 'GBR', 'England', '106293'), +('515', 'Sutton Coldfield', 'GBR', 'England', '106001'), +('516', 'York', 'GBR', 'England', '104425'), +('517', 'Oldham', 'GBR', 'England', '103931'), +('518', 'Basildon', 'GBR', 'England', '100924'), +('519', 'Worthing', 'GBR', 'England', '100000'), +('520', 'Chelmsford', 'GBR', 'England', '97451'), +('521', 'Colchester', 'GBR', 'England', '96063'), +('522', 'Crawley', 'GBR', 'England', '97000'), +('523', 'Gillingham', 'GBR', 'England', '92000'), +('524', 'Solihull', 'GBR', 'England', '94531'), +('525', 'Rochdale', 'GBR', 'England', '94313'), +('526', 'Birkenhead', 'GBR', 'England', '93087'), +('527', 'Worcester', 'GBR', 'England', '95000'), +('528', 'Hartlepool', 'GBR', 'England', '92000'), +('529', 'Halifax', 'GBR', 'England', '91069'), +('530', 'Woking/Byfleet', 'GBR', 'England', '92000'), +('531', 'Southport', 'GBR', 'England', '90959'), +('532', 'Maidstone', 'GBR', 'England', '90878'), +('533', 'Eastbourne', 'GBR', 'England', '90000'), +('534', 'Grimsby', 'GBR', 'England', '89000'), +('535', 'Saint Helier', 'GBR', 'Jersey', '27523'), +('536', 'Douglas', 'GBR', '–', '23487'), +('537', 'Road Town', 'VGB', 'Tortola', '8000'), +('538', 'Bandar Seri Begawan', 'BRN', 'Brunei and Muara', '21484'), +('539', 'Sofija', 'BGR', 'Grad Sofija', '1122302'), +('540', 'Plovdiv', 'BGR', 'Plovdiv', '342584'), +('541', 'Varna', 'BGR', 'Varna', '299801'), +('542', 'Burgas', 'BGR', 'Burgas', '195255'), +('543', 'Ruse', 'BGR', 'Ruse', '166467'), +('544', 'Stara Zagora', 'BGR', 'Haskovo', '147939'), +('545', 'Pleven', 'BGR', 'Lovec', '121952'), +('546', 'Sliven', 'BGR', 'Burgas', '105530'), +('547', 'Dobric', 'BGR', 'Varna', '100399'), +('548', 'Šumen', 'BGR', 'Varna', '94686'), +('549', 'Ouagadougou', 'BFA', 'Kadiogo', '824000'), +('550', 'Bobo-Dioulasso', 'BFA', 'Houet', '300000'), +('551', 'Koudougou', 'BFA', 'Boulkiemdé', '105000'), +('552', 'Bujumbura', 'BDI', 'Bujumbura', '300000'), +('553', 'George Town', 'CYM', 'Grand Cayman', '19600'), +('554', 'Santiago de Chile', 'CHL', 'Santiago', '4703954'), +('555', 'Puente Alto', 'CHL', 'Santiago', '386236'), +('556', 'Vińa del Mar', 'CHL', 'Valparaíso', '312493'), +('557', 'Valparaíso', 'CHL', 'Valparaíso', '293800'), +('558', 'Talcahuano', 'CHL', 'Bíobío', '277752'), +('559', 'Antofagasta', 'CHL', 'Antofagasta', '251429'), +('560', 'San Bernardo', 'CHL', 'Santiago', '241910'), +('561', 'Temuco', 'CHL', 'La Araucanía', '233041'), +('562', 'Concepción', 'CHL', 'Bíobío', '217664'), +('563', 'Rancagua', 'CHL', 'O´Higgins', '212977'), +('564', 'Arica', 'CHL', 'Tarapacá', '189036'), +('565', 'Talca', 'CHL', 'Maule', '187557'), +('566', 'Chillán', 'CHL', 'Bíobío', '178182'), +('567', 'Iquique', 'CHL', 'Tarapacá', '177892'), +('568', 'Los Angeles', 'CHL', 'Bíobío', '158215'), +('569', 'Puerto Montt', 'CHL', 'Los Lagos', '152194'), +('570', 'Coquimbo', 'CHL', 'Coquimbo', '143353'), +('571', 'Osorno', 'CHL', 'Los Lagos', '141468'), +('572', 'La Serena', 'CHL', 'Coquimbo', '137409'), +('573', 'Calama', 'CHL', 'Antofagasta', '137265'), +('574', 'Valdivia', 'CHL', 'Los Lagos', '133106'), +('575', 'Punta Arenas', 'CHL', 'Magallanes', '125631'), +('576', 'Copiapó', 'CHL', 'Atacama', '120128'), +('577', 'Quilpué', 'CHL', 'Valparaíso', '118857'), +('578', 'Curicó', 'CHL', 'Maule', '115766'), +('579', 'Ovalle', 'CHL', 'Coquimbo', '94854'), +('580', 'Coronel', 'CHL', 'Bíobío', '93061'), +('581', 'San Pedro de la Paz', 'CHL', 'Bíobío', '91684'), +('582', 'Melipilla', 'CHL', 'Santiago', '91056'), +('583', 'Avarua', 'COK', 'Rarotonga', '11900'), +('584', 'San José', 'CRI', 'San José', '339131'), +('585', 'Djibouti', 'DJI', 'Djibouti', '383000'), +('586', 'Roseau', 'DMA', 'St George', '16243'), +('587', 'Santo Domingo de Guzmán', 'DOM', 'Distrito Nacional', '1609966'), +('588', 'Santiago de los Caballeros', 'DOM', 'Santiago', '365463'), +('589', 'La Romana', 'DOM', 'La Romana', '140204'), +('590', 'San Pedro de Macorís', 'DOM', 'San Pedro de Macorís', '124735'), +('591', 'San Francisco de Macorís', 'DOM', 'Duarte', '108485'), +('592', 'San Felipe de Puerto Plata', 'DOM', 'Puerto Plata', '89423'), +('593', 'Guayaquil', 'ECU', 'Guayas', '2070040'), +('594', 'Quito', 'ECU', 'Pichincha', '1573458'), +('595', 'Cuenca', 'ECU', 'Azuay', '270353'), +('596', 'Machala', 'ECU', 'El Oro', '210368'), +('597', 'Santo Domingo de los Colorados', 'ECU', 'Pichincha', '202111'), +('598', 'Portoviejo', 'ECU', 'Manabí', '176413'), +('599', 'Ambato', 'ECU', 'Tungurahua', '169612'), +('600', 'Manta', 'ECU', 'Manabí', '164739'), +('601', 'Duran [Eloy Alfaro]', 'ECU', 'Guayas', '152514'), +('602', 'Ibarra', 'ECU', 'Imbabura', '130643'), +('603', 'Quevedo', 'ECU', 'Los Ríos', '129631'), +('604', 'Milagro', 'ECU', 'Guayas', '124177'), +('605', 'Loja', 'ECU', 'Loja', '123875'), +('606', 'Ríobamba', 'ECU', 'Chimborazo', '123163'), +('607', 'Esmeraldas', 'ECU', 'Esmeraldas', '123045'), +('608', 'Cairo', 'EGY', 'Kairo', '6789479'), +('609', 'Alexandria', 'EGY', 'Aleksandria', '3328196'), +('610', 'Giza', 'EGY', 'Giza', '2221868'), +('611', 'Shubra al-Khayma', 'EGY', 'al-Qalyubiya', '870716'), +('612', 'Port Said', 'EGY', 'Port Said', '469533'), +('613', 'Suez', 'EGY', 'Suez', '417610'), +('614', 'al-Mahallat al-Kubra', 'EGY', 'al-Gharbiya', '395402'), +('615', 'Tanta', 'EGY', 'al-Gharbiya', '371010'), +('616', 'al-Mansura', 'EGY', 'al-Daqahliya', '369621'), +('617', 'Luxor', 'EGY', 'Luxor', '360503'), +('618', 'Asyut', 'EGY', 'Asyut', '343498'), +('619', 'Bahtim', 'EGY', 'al-Qalyubiya', '275807'), +('620', 'Zagazig', 'EGY', 'al-Sharqiya', '267351'), +('621', 'al-Faiyum', 'EGY', 'al-Faiyum', '260964'), +('622', 'Ismailia', 'EGY', 'Ismailia', '254477'), +('623', 'Kafr al-Dawwar', 'EGY', 'al-Buhayra', '231978'), +('624', 'Assuan', 'EGY', 'Assuan', '219017'), +('625', 'Damanhur', 'EGY', 'al-Buhayra', '212203'), +('626', 'al-Minya', 'EGY', 'al-Minya', '201360'), +('627', 'Bani Suwayf', 'EGY', 'Bani Suwayf', '172032'), +('628', 'Qina', 'EGY', 'Qina', '171275'), +('629', 'Sawhaj', 'EGY', 'Sawhaj', '170125'), +('630', 'Shibin al-Kawm', 'EGY', 'al-Minufiya', '159909'), +('631', 'Bulaq al-Dakrur', 'EGY', 'Giza', '148787'), +('632', 'Banha', 'EGY', 'al-Qalyubiya', '145792'), +('633', 'Warraq al-Arab', 'EGY', 'Giza', '127108'), +('634', 'Kafr al-Shaykh', 'EGY', 'Kafr al-Shaykh', '124819'), +('635', 'Mallawi', 'EGY', 'al-Minya', '119283'), +('636', 'Bilbays', 'EGY', 'al-Sharqiya', '113608'), +('637', 'Mit Ghamr', 'EGY', 'al-Daqahliya', '101801'), +('638', 'al-Arish', 'EGY', 'Shamal Sina', '100447'), +('639', 'Talkha', 'EGY', 'al-Daqahliya', '97700'), +('640', 'Qalyub', 'EGY', 'al-Qalyubiya', '97200'), +('641', 'Jirja', 'EGY', 'Sawhaj', '95400'), +('642', 'Idfu', 'EGY', 'Qina', '94200'), +('643', 'al-Hawamidiya', 'EGY', 'Giza', '91700'), +('644', 'Disuq', 'EGY', 'Kafr al-Shaykh', '91300'), +('645', 'San Salvador', 'SLV', 'San Salvador', '415346'), +('646', 'Santa Ana', 'SLV', 'Santa Ana', '139389'), +('647', 'Mejicanos', 'SLV', 'San Salvador', '138800'), +('648', 'Soyapango', 'SLV', 'San Salvador', '129800'), +('649', 'San Miguel', 'SLV', 'San Miguel', '127696'), +('650', 'Nueva San Salvador', 'SLV', 'La Libertad', '98400'), +('651', 'Apopa', 'SLV', 'San Salvador', '88800'), +('652', 'Asmara', 'ERI', 'Maekel', '431000'), +('653', 'Madrid', 'ESP', 'Madrid', '2879052'), +('654', 'Barcelona', 'ESP', 'Katalonia', '1503451'), +('655', 'Valencia', 'ESP', 'Valencia', '739412'), +('656', 'Sevilla', 'ESP', 'Andalusia', '701927'), +('657', 'Zaragoza', 'ESP', 'Aragonia', '603367'), +('658', 'Málaga', 'ESP', 'Andalusia', '530553'), +('659', 'Bilbao', 'ESP', 'Baskimaa', '357589'), +('660', 'Las Palmas de Gran Canaria', 'ESP', 'Canary Islands', '354757'), +('661', 'Murcia', 'ESP', 'Murcia', '353504'), +('662', 'Palma de Mallorca', 'ESP', 'Balears', '326993'), +('663', 'Valladolid', 'ESP', 'Castilla and León', '319998'), +('664', 'Córdoba', 'ESP', 'Andalusia', '311708'), +('665', 'Vigo', 'ESP', 'Galicia', '283670'), +('666', 'Alicante [Alacant]', 'ESP', 'Valencia', '272432'), +('667', 'Gijón', 'ESP', 'Asturia', '267980'), +('668', 'L´Hospitalet de Llobregat', 'ESP', 'Katalonia', '247986'), +('669', 'Granada', 'ESP', 'Andalusia', '244767'), +('670', 'A Coruńa (La Coruńa)', 'ESP', 'Galicia', '243402'), +('671', 'Vitoria-Gasteiz', 'ESP', 'Baskimaa', '217154'), +('672', 'Santa Cruz de Tenerife', 'ESP', 'Canary Islands', '213050'), +('673', 'Badalona', 'ESP', 'Katalonia', '209635'), +('674', 'Oviedo', 'ESP', 'Asturia', '200453'), +('675', 'Móstoles', 'ESP', 'Madrid', '195351'), +('676', 'Elche [Elx]', 'ESP', 'Valencia', '193174'), +('677', 'Sabadell', 'ESP', 'Katalonia', '184859'), +('678', 'Santander', 'ESP', 'Cantabria', '184165'), +('679', 'Jerez de la Frontera', 'ESP', 'Andalusia', '182660'), +('680', 'Pamplona [Iruńa]', 'ESP', 'Navarra', '180483'), +('681', 'Donostia-San Sebastián', 'ESP', 'Baskimaa', '179208'), +('682', 'Cartagena', 'ESP', 'Murcia', '177709'), +('683', 'Leganés', 'ESP', 'Madrid', '173163'), +('684', 'Fuenlabrada', 'ESP', 'Madrid', '171173'), +('685', 'Almería', 'ESP', 'Andalusia', '169027'), +('686', 'Terrassa', 'ESP', 'Katalonia', '168695'), +('687', 'Alcalá de Henares', 'ESP', 'Madrid', '164463'), +('688', 'Burgos', 'ESP', 'Castilla and León', '162802'), +('689', 'Salamanca', 'ESP', 'Castilla and León', '158720'), +('690', 'Albacete', 'ESP', 'Kastilia-La Mancha', '147527'), +('691', 'Getafe', 'ESP', 'Madrid', '145371'), +('692', 'Cádiz', 'ESP', 'Andalusia', '142449'), +('693', 'Alcorcón', 'ESP', 'Madrid', '142048'), +('694', 'Huelva', 'ESP', 'Andalusia', '140583'), +('695', 'León', 'ESP', 'Castilla and León', '139809'), +('696', 'Castellón de la Plana [Castell', 'ESP', 'Valencia', '139712'), +('697', 'Badajoz', 'ESP', 'Extremadura', '136613'), +('698', '[San Cristóbal de] la Laguna', 'ESP', 'Canary Islands', '127945'), +('699', 'Logrońo', 'ESP', 'La Rioja', '127093'), +('700', 'Santa Coloma de Gramenet', 'ESP', 'Katalonia', '120802'), +('701', 'Tarragona', 'ESP', 'Katalonia', '113016'), +('702', 'Lleida (Lérida)', 'ESP', 'Katalonia', '112207'), +('703', 'Jaén', 'ESP', 'Andalusia', '109247'), +('704', 'Ourense (Orense)', 'ESP', 'Galicia', '109120'), +('705', 'Mataró', 'ESP', 'Katalonia', '104095'), +('706', 'Algeciras', 'ESP', 'Andalusia', '103106'), +('707', 'Marbella', 'ESP', 'Andalusia', '101144'), +('708', 'Barakaldo', 'ESP', 'Baskimaa', '98212'), +('709', 'Dos Hermanas', 'ESP', 'Andalusia', '94591'), +('710', 'Santiago de Compostela', 'ESP', 'Galicia', '93745'), +('711', 'Torrejón de Ardoz', 'ESP', 'Madrid', '92262'), +('712', 'Cape Town', 'ZAF', 'Western Cape', '2352121'), +('713', 'Soweto', 'ZAF', 'Gauteng', '904165'), +('714', 'Johannesburg', 'ZAF', 'Gauteng', '756653'), +('715', 'Port Elizabeth', 'ZAF', 'Eastern Cape', '752319'), +('716', 'Pretoria', 'ZAF', 'Gauteng', '658630'), +('717', 'Inanda', 'ZAF', 'KwaZulu-Natal', '634065'), +('718', 'Durban', 'ZAF', 'KwaZulu-Natal', '566120'), +('719', 'Vanderbijlpark', 'ZAF', 'Gauteng', '468931'), +('720', 'Kempton Park', 'ZAF', 'Gauteng', '442633'), +('721', 'Alberton', 'ZAF', 'Gauteng', '410102'), +('722', 'Pinetown', 'ZAF', 'KwaZulu-Natal', '378810'), +('723', 'Pietermaritzburg', 'ZAF', 'KwaZulu-Natal', '370190'), +('724', 'Benoni', 'ZAF', 'Gauteng', '365467'), +('725', 'Randburg', 'ZAF', 'Gauteng', '341288'), +('726', 'Umlazi', 'ZAF', 'KwaZulu-Natal', '339233'), +('727', 'Bloemfontein', 'ZAF', 'Free State', '334341'), +('728', 'Vereeniging', 'ZAF', 'Gauteng', '328535'), +('729', 'Wonderboom', 'ZAF', 'Gauteng', '283289'), +('730', 'Roodepoort', 'ZAF', 'Gauteng', '279340'), +('731', 'Boksburg', 'ZAF', 'Gauteng', '262648'), +('732', 'Klerksdorp', 'ZAF', 'North West', '261911'), +('733', 'Soshanguve', 'ZAF', 'Gauteng', '242727'), +('734', 'Newcastle', 'ZAF', 'KwaZulu-Natal', '222993'), +('735', 'East London', 'ZAF', 'Eastern Cape', '221047'), +('736', 'Welkom', 'ZAF', 'Free State', '203296'), +('737', 'Kimberley', 'ZAF', 'Northern Cape', '197254'), +('738', 'Uitenhage', 'ZAF', 'Eastern Cape', '192120'), +('739', 'Chatsworth', 'ZAF', 'KwaZulu-Natal', '189885'), +('740', 'Mdantsane', 'ZAF', 'Eastern Cape', '182639'), +('741', 'Krugersdorp', 'ZAF', 'Gauteng', '181503'), +('742', 'Botshabelo', 'ZAF', 'Free State', '177971'), +('743', 'Brakpan', 'ZAF', 'Gauteng', '171363'), +('744', 'Witbank', 'ZAF', 'Mpumalanga', '167183'), +('745', 'Oberholzer', 'ZAF', 'Gauteng', '164367'), +('746', 'Germiston', 'ZAF', 'Gauteng', '164252'), +('747', 'Springs', 'ZAF', 'Gauteng', '162072'), +('748', 'Westonaria', 'ZAF', 'Gauteng', '159632'), +('749', 'Randfontein', 'ZAF', 'Gauteng', '120838'), +('750', 'Paarl', 'ZAF', 'Western Cape', '105768'), +('751', 'Potchefstroom', 'ZAF', 'North West', '101817'), +('752', 'Rustenburg', 'ZAF', 'North West', '97008'), +('753', 'Nigel', 'ZAF', 'Gauteng', '96734'), +('754', 'George', 'ZAF', 'Western Cape', '93818'), +('755', 'Ladysmith', 'ZAF', 'KwaZulu-Natal', '89292'), +('756', 'Addis Abeba', 'ETH', 'Addis Abeba', '2495000'), +('757', 'Dire Dawa', 'ETH', 'Dire Dawa', '164851'), +('758', 'Nazret', 'ETH', 'Oromia', '127842'), +('759', 'Gonder', 'ETH', 'Amhara', '112249'), +('760', 'Dese', 'ETH', 'Amhara', '97314'), +('761', 'Mekele', 'ETH', 'Tigray', '96938'), +('762', 'Bahir Dar', 'ETH', 'Amhara', '96140'), +('763', 'Stanley', 'FLK', 'East Falkland', '1636'), +('764', 'Suva', 'FJI', 'Central', '77366'), +('765', 'Quezon', 'PHL', 'National Capital Reg', '2173831'), +('766', 'Manila', 'PHL', 'National Capital Reg', '1581082'), +('767', 'Kalookan', 'PHL', 'National Capital Reg', '1177604'), +('768', 'Davao', 'PHL', 'Southern Mindanao', '1147116'), +('769', 'Cebu', 'PHL', 'Central Visayas', '718821'), +('770', 'Zamboanga', 'PHL', 'Western Mindanao', '601794'), +('771', 'Pasig', 'PHL', 'National Capital Reg', '505058'), +('772', 'Valenzuela', 'PHL', 'National Capital Reg', '485433'), +('773', 'Las Pińas', 'PHL', 'National Capital Reg', '472780'), +('774', 'Antipolo', 'PHL', 'Southern Tagalog', '470866'), +('775', 'Taguig', 'PHL', 'National Capital Reg', '467375'), +('776', 'Cagayan de Oro', 'PHL', 'Northern Mindanao', '461877'), +('777', 'Parańaque', 'PHL', 'National Capital Reg', '449811'), +('778', 'Makati', 'PHL', 'National Capital Reg', '444867'), +('779', 'Bacolod', 'PHL', 'Western Visayas', '429076'), +('780', 'General Santos', 'PHL', 'Southern Mindanao', '411822'), +('781', 'Marikina', 'PHL', 'National Capital Reg', '391170'), +('782', 'Dasmarińas', 'PHL', 'Southern Tagalog', '379520'), +('783', 'Muntinlupa', 'PHL', 'National Capital Reg', '379310'), +('784', 'Iloilo', 'PHL', 'Western Visayas', '365820'), +('785', 'Pasay', 'PHL', 'National Capital Reg', '354908'), +('786', 'Malabon', 'PHL', 'National Capital Reg', '338855'), +('787', 'San José del Monte', 'PHL', 'Central Luzon', '315807'), +('788', 'Bacoor', 'PHL', 'Southern Tagalog', '305699'), +('789', 'Iligan', 'PHL', 'Central Mindanao', '285061'), +('790', 'Calamba', 'PHL', 'Southern Tagalog', '281146'), +('791', 'Mandaluyong', 'PHL', 'National Capital Reg', '278474'), +('792', 'Butuan', 'PHL', 'Caraga', '267279'), +('793', 'Angeles', 'PHL', 'Central Luzon', '263971'), +('794', 'Tarlac', 'PHL', 'Central Luzon', '262481'), +('795', 'Mandaue', 'PHL', 'Central Visayas', '259728'), +('796', 'Baguio', 'PHL', 'CAR', '252386'), +('797', 'Batangas', 'PHL', 'Southern Tagalog', '247588'), +('798', 'Cainta', 'PHL', 'Southern Tagalog', '242511'), +('799', 'San Pedro', 'PHL', 'Southern Tagalog', '231403'), +('800', 'Navotas', 'PHL', 'National Capital Reg', '230403'), +('801', 'Cabanatuan', 'PHL', 'Central Luzon', '222859'), +('802', 'San Fernando', 'PHL', 'Central Luzon', '221857'), +('803', 'Lipa', 'PHL', 'Southern Tagalog', '218447'), +('804', 'Lapu-Lapu', 'PHL', 'Central Visayas', '217019'), +('805', 'San Pablo', 'PHL', 'Southern Tagalog', '207927'), +('806', 'Bińan', 'PHL', 'Southern Tagalog', '201186'), +('807', 'Taytay', 'PHL', 'Southern Tagalog', '198183'), +('808', 'Lucena', 'PHL', 'Southern Tagalog', '196075'), +('809', 'Imus', 'PHL', 'Southern Tagalog', '195482'), +('810', 'Olongapo', 'PHL', 'Central Luzon', '194260'), +('811', 'Binangonan', 'PHL', 'Southern Tagalog', '187691'), +('812', 'Santa Rosa', 'PHL', 'Southern Tagalog', '185633'), +('813', 'Tagum', 'PHL', 'Southern Mindanao', '179531'), +('814', 'Tacloban', 'PHL', 'Eastern Visayas', '178639'), +('815', 'Malolos', 'PHL', 'Central Luzon', '175291'), +('816', 'Mabalacat', 'PHL', 'Central Luzon', '171045'), +('817', 'Cotabato', 'PHL', 'Central Mindanao', '163849'), +('818', 'Meycauayan', 'PHL', 'Central Luzon', '163037'), +('819', 'Puerto Princesa', 'PHL', 'Southern Tagalog', '161912'), +('820', 'Legazpi', 'PHL', 'Bicol', '157010'), +('821', 'Silang', 'PHL', 'Southern Tagalog', '156137'), +('822', 'Ormoc', 'PHL', 'Eastern Visayas', '154297'), +('823', 'San Carlos', 'PHL', 'Ilocos', '154264'), +('824', 'Kabankalan', 'PHL', 'Western Visayas', '149769'), +('825', 'Talisay', 'PHL', 'Central Visayas', '148110'), +('826', 'Valencia', 'PHL', 'Northern Mindanao', '147924'), +('827', 'Calbayog', 'PHL', 'Eastern Visayas', '147187'), +('828', 'Santa Maria', 'PHL', 'Central Luzon', '144282'), +('829', 'Pagadian', 'PHL', 'Western Mindanao', '142515'), +('830', 'Cadiz', 'PHL', 'Western Visayas', '141954'), +('831', 'Bago', 'PHL', 'Western Visayas', '141721'), +('832', 'Toledo', 'PHL', 'Central Visayas', '141174'), +('833', 'Naga', 'PHL', 'Bicol', '137810'), +('834', 'San Mateo', 'PHL', 'Southern Tagalog', '135603'), +('835', 'Panabo', 'PHL', 'Southern Mindanao', '133950'), +('836', 'Koronadal', 'PHL', 'Southern Mindanao', '133786'), +('837', 'Marawi', 'PHL', 'Central Mindanao', '131090'), +('838', 'Dagupan', 'PHL', 'Ilocos', '130328'), +('839', 'Sagay', 'PHL', 'Western Visayas', '129765'), +('840', 'Roxas', 'PHL', 'Western Visayas', '126352'), +('841', 'Lubao', 'PHL', 'Central Luzon', '125699'), +('842', 'Digos', 'PHL', 'Southern Mindanao', '125171'), +('843', 'San Miguel', 'PHL', 'Central Luzon', '123824'), +('844', 'Malaybalay', 'PHL', 'Northern Mindanao', '123672'), +('845', 'Tuguegarao', 'PHL', 'Cagayan Valley', '120645'), +('846', 'Ilagan', 'PHL', 'Cagayan Valley', '119990'), +('847', 'Baliuag', 'PHL', 'Central Luzon', '119675'), +('848', 'Surigao', 'PHL', 'Caraga', '118534'), +('849', 'San Carlos', 'PHL', 'Western Visayas', '118259'), +('850', 'San Juan del Monte', 'PHL', 'National Capital Reg', '117680'), +('851', 'Tanauan', 'PHL', 'Southern Tagalog', '117539'), +('852', 'Concepcion', 'PHL', 'Central Luzon', '115171'), +('853', 'Rodriguez (Montalban)', 'PHL', 'Southern Tagalog', '115167'), +('854', 'Sariaya', 'PHL', 'Southern Tagalog', '114568'), +('855', 'Malasiqui', 'PHL', 'Ilocos', '113190'), +('856', 'General Mariano Alvarez', 'PHL', 'Southern Tagalog', '112446'), +('857', 'Urdaneta', 'PHL', 'Ilocos', '111582'), +('858', 'Hagonoy', 'PHL', 'Central Luzon', '111425'), +('859', 'San Jose', 'PHL', 'Southern Tagalog', '111009'), +('860', 'Polomolok', 'PHL', 'Southern Mindanao', '110709'), +('861', 'Santiago', 'PHL', 'Cagayan Valley', '110531'), +('862', 'Tanza', 'PHL', 'Southern Tagalog', '110517'), +('863', 'Ozamis', 'PHL', 'Northern Mindanao', '110420'), +('864', 'Mexico', 'PHL', 'Central Luzon', '109481'), +('865', 'San Jose', 'PHL', 'Central Luzon', '108254'), +('866', 'Silay', 'PHL', 'Western Visayas', '107722'), +('867', 'General Trias', 'PHL', 'Southern Tagalog', '107691'), +('868', 'Tabaco', 'PHL', 'Bicol', '107166'), +('869', 'Cabuyao', 'PHL', 'Southern Tagalog', '106630'), +('870', 'Calapan', 'PHL', 'Southern Tagalog', '105910'), +('871', 'Mati', 'PHL', 'Southern Mindanao', '105908'), +('872', 'Midsayap', 'PHL', 'Central Mindanao', '105760'), +('873', 'Cauayan', 'PHL', 'Cagayan Valley', '103952'), +('874', 'Gingoog', 'PHL', 'Northern Mindanao', '102379'), +('875', 'Dumaguete', 'PHL', 'Central Visayas', '102265'), +('876', 'San Fernando', 'PHL', 'Ilocos', '102082'), +('877', 'Arayat', 'PHL', 'Central Luzon', '101792'), +('878', 'Bayawan (Tulong)', 'PHL', 'Central Visayas', '101391'), +('879', 'Kidapawan', 'PHL', 'Central Mindanao', '101205'), +('880', 'Daraga (Locsin)', 'PHL', 'Bicol', '101031'), +('881', 'Marilao', 'PHL', 'Central Luzon', '101017'), +('882', 'Malita', 'PHL', 'Southern Mindanao', '100000'), +('883', 'Dipolog', 'PHL', 'Western Mindanao', '99862'), +('884', 'Cavite', 'PHL', 'Southern Tagalog', '99367'), +('885', 'Danao', 'PHL', 'Central Visayas', '98781'), +('886', 'Bislig', 'PHL', 'Caraga', '97860'), +('887', 'Talavera', 'PHL', 'Central Luzon', '97329'), +('888', 'Guagua', 'PHL', 'Central Luzon', '96858'), +('889', 'Bayambang', 'PHL', 'Ilocos', '96609'), +('890', 'Nasugbu', 'PHL', 'Southern Tagalog', '96113'), +('891', 'Baybay', 'PHL', 'Eastern Visayas', '95630'), +('892', 'Capas', 'PHL', 'Central Luzon', '95219'), +('893', 'Sultan Kudarat', 'PHL', 'ARMM', '94861'), +('894', 'Laoag', 'PHL', 'Ilocos', '94466'), +('895', 'Bayugan', 'PHL', 'Caraga', '93623'), +('896', 'Malungon', 'PHL', 'Southern Mindanao', '93232'), +('897', 'Santa Cruz', 'PHL', 'Southern Tagalog', '92694'), +('898', 'Sorsogon', 'PHL', 'Bicol', '92512'), +('899', 'Candelaria', 'PHL', 'Southern Tagalog', '92429'), +('900', 'Ligao', 'PHL', 'Bicol', '90603'), +('901', 'Tórshavn', 'FRO', 'Streymoyar', '14542'), +('902', 'Libreville', 'GAB', 'Estuaire', '419000'), +('903', 'Serekunda', 'GMB', 'Kombo St Mary', '102600'), +('904', 'Banjul', 'GMB', 'Banjul', '42326'), +('905', 'Tbilisi', 'GEO', 'Tbilisi', '1235200'), +('906', 'Kutaisi', 'GEO', 'Imereti', '240900'), +('907', 'Rustavi', 'GEO', 'Kvemo Kartli', '155400'), +('908', 'Batumi', 'GEO', 'Adzaria [Atšara]', '137700'), +('909', 'Sohumi', 'GEO', 'Abhasia [Aphazeti]', '111700'), +('910', 'Accra', 'GHA', 'Greater Accra', '1070000'), +('911', 'Kumasi', 'GHA', 'Ashanti', '385192'), +('912', 'Tamale', 'GHA', 'Northern', '151069'), +('913', 'Tema', 'GHA', 'Greater Accra', '109975'), +('914', 'Sekondi-Takoradi', 'GHA', 'Western', '103653'), +('915', 'Gibraltar', 'GIB', '–', '27025'), +('916', 'Saint George´s', 'GRD', 'St George', '4621'), +('917', 'Nuuk', 'GRL', 'Kitaa', '13445'), +('918', 'Les Abymes', 'GLP', 'Grande-Terre', '62947'), +('919', 'Basse-Terre', 'GLP', 'Basse-Terre', '12433'), +('920', 'Tamuning', 'GUM', '–', '9500'), +('921', 'Agańa', 'GUM', '–', '1139'), +('922', 'Ciudad de Guatemala', 'GTM', 'Guatemala', '823301'), +('923', 'Mixco', 'GTM', 'Guatemala', '209791'), +('924', 'Villa Nueva', 'GTM', 'Guatemala', '101295'), +('925', 'Quetzaltenango', 'GTM', 'Quetzaltenango', '90801'), +('926', 'Conakry', 'GIN', 'Conakry', '1090610'), +('927', 'Bissau', 'GNB', 'Bissau', '241000'), +('928', 'Georgetown', 'GUY', 'Georgetown', '254000'), +('929', 'Port-au-Prince', 'HTI', 'Ouest', '884472'), +('930', 'Carrefour', 'HTI', 'Ouest', '290204'), +('931', 'Delmas', 'HTI', 'Ouest', '240429'), +('932', 'Le-Cap-Haďtien', 'HTI', 'Nord', '102233'), +('933', 'Tegucigalpa', 'HND', 'Distrito Central', '813900'), +('934', 'San Pedro Sula', 'HND', 'Cortés', '383900'), +('935', 'La Ceiba', 'HND', 'Atlántida', '89200'), +('936', 'Kowloon and New Kowloon', 'HKG', 'Kowloon and New Kowl', '1987996'), +('937', 'Victoria', 'HKG', 'Hongkong', '1312637'), +('938', 'Longyearbyen', 'SJM', 'Länsimaa', '1438'), +('939', 'Jakarta', 'IDN', 'Jakarta Raya', '9604900'), +('940', 'Surabaya', 'IDN', 'East Java', '2663820'), +('941', 'Bandung', 'IDN', 'West Java', '2429000'), +('942', 'Medan', 'IDN', 'Sumatera Utara', '1843919'), +('943', 'Palembang', 'IDN', 'Sumatera Selatan', '1222764'), +('944', 'Tangerang', 'IDN', 'West Java', '1198300'), +('945', 'Semarang', 'IDN', 'Central Java', '1104405'), +('946', 'Ujung Pandang', 'IDN', 'Sulawesi Selatan', '1060257'), +('947', 'Malang', 'IDN', 'East Java', '716862'), +('948', 'Bandar Lampung', 'IDN', 'Lampung', '680332'), +('949', 'Bekasi', 'IDN', 'West Java', '644300'), +('950', 'Padang', 'IDN', 'Sumatera Barat', '534474'), +('951', 'Surakarta', 'IDN', 'Central Java', '518600'), +('952', 'Banjarmasin', 'IDN', 'Kalimantan Selatan', '482931'), +('953', 'Pekan Baru', 'IDN', 'Riau', '438638'), +('954', 'Denpasar', 'IDN', 'Bali', '435000'), +('955', 'Yogyakarta', 'IDN', 'Yogyakarta', '418944'), +('956', 'Pontianak', 'IDN', 'Kalimantan Barat', '409632'), +('957', 'Samarinda', 'IDN', 'Kalimantan Timur', '399175'), +('958', 'Jambi', 'IDN', 'Jambi', '385201'), +('959', 'Depok', 'IDN', 'West Java', '365200'), +('960', 'Cimahi', 'IDN', 'West Java', '344600'), +('961', 'Balikpapan', 'IDN', 'Kalimantan Timur', '338752'), +('962', 'Manado', 'IDN', 'Sulawesi Utara', '332288'), +('963', 'Mataram', 'IDN', 'Nusa Tenggara Barat', '306600'), +('964', 'Pekalongan', 'IDN', 'Central Java', '301504'), +('965', 'Tegal', 'IDN', 'Central Java', '289744'), +('966', 'Bogor', 'IDN', 'West Java', '285114'), +('967', 'Ciputat', 'IDN', 'West Java', '270800'), +('968', 'Pondokgede', 'IDN', 'West Java', '263200'), +('969', 'Cirebon', 'IDN', 'West Java', '254406'), +('970', 'Kediri', 'IDN', 'East Java', '253760'), +('971', 'Ambon', 'IDN', 'Molukit', '249312'), +('972', 'Jember', 'IDN', 'East Java', '218500'), +('973', 'Cilacap', 'IDN', 'Central Java', '206900'), +('974', 'Cimanggis', 'IDN', 'West Java', '205100'), +('975', 'Pematang Siantar', 'IDN', 'Sumatera Utara', '203056'), +('976', 'Purwokerto', 'IDN', 'Central Java', '202500'), +('977', 'Ciomas', 'IDN', 'West Java', '187400'), +('978', 'Tasikmalaya', 'IDN', 'West Java', '179800'), +('979', 'Madiun', 'IDN', 'East Java', '171532'), +('980', 'Bengkulu', 'IDN', 'Bengkulu', '146439'), +('981', 'Karawang', 'IDN', 'West Java', '145000'), +('982', 'Banda Aceh', 'IDN', 'Aceh', '143409'), +('983', 'Palu', 'IDN', 'Sulawesi Tengah', '142800'), +('984', 'Pasuruan', 'IDN', 'East Java', '134019'), +('985', 'Kupang', 'IDN', 'Nusa Tenggara Timur', '129300'), +('986', 'Tebing Tinggi', 'IDN', 'Sumatera Utara', '129300'), +('987', 'Percut Sei Tuan', 'IDN', 'Sumatera Utara', '129000'), +('988', 'Binjai', 'IDN', 'Sumatera Utara', '127222'), +('989', 'Sukabumi', 'IDN', 'West Java', '125766'), +('990', 'Waru', 'IDN', 'East Java', '124300'), +('991', 'Pangkal Pinang', 'IDN', 'Sumatera Selatan', '124000'), +('992', 'Magelang', 'IDN', 'Central Java', '123800'), +('993', 'Blitar', 'IDN', 'East Java', '122600'), +('994', 'Serang', 'IDN', 'West Java', '122400'), +('995', 'Probolinggo', 'IDN', 'East Java', '120770'), +('996', 'Cilegon', 'IDN', 'West Java', '117000'), +('997', 'Cianjur', 'IDN', 'West Java', '114300'), +('998', 'Ciparay', 'IDN', 'West Java', '111500'), +('999', 'Lhokseumawe', 'IDN', 'Aceh', '109600'); + +INSERT INTO city (id, name, countrycode, district, population) VALUES +('1000', 'Taman', 'IDN', 'East Java', '107000'), +('1001', 'Depok', 'IDN', 'Yogyakarta', '106800'), +('1002', 'Citeureup', 'IDN', 'West Java', '105100'), +('1003', 'Pemalang', 'IDN', 'Central Java', '103500'), +('1004', 'Klaten', 'IDN', 'Central Java', '103300'), +('1005', 'Salatiga', 'IDN', 'Central Java', '103000'), +('1006', 'Cibinong', 'IDN', 'West Java', '101300'), +('1007', 'Palangka Raya', 'IDN', 'Kalimantan Tengah', '99693'), +('1008', 'Mojokerto', 'IDN', 'East Java', '96626'), +('1009', 'Purwakarta', 'IDN', 'West Java', '95900'), +('1010', 'Garut', 'IDN', 'West Java', '95800'), +('1011', 'Kudus', 'IDN', 'Central Java', '95300'), +('1012', 'Kendari', 'IDN', 'Sulawesi Tenggara', '94800'), +('1013', 'Jaya Pura', 'IDN', 'West Irian', '94700'), +('1014', 'Gorontalo', 'IDN', 'Sulawesi Utara', '94058'), +('1015', 'Majalaya', 'IDN', 'West Java', '93200'), +('1016', 'Pondok Aren', 'IDN', 'West Java', '92700'), +('1017', 'Jombang', 'IDN', 'East Java', '92600'), +('1018', 'Sunggal', 'IDN', 'Sumatera Utara', '92300'), +('1019', 'Batam', 'IDN', 'Riau', '91871'), +('1020', 'Padang Sidempuan', 'IDN', 'Sumatera Utara', '91200'), +('1021', 'Sawangan', 'IDN', 'West Java', '91100'), +('1022', 'Banyuwangi', 'IDN', 'East Java', '89900'), +('1023', 'Tanjung Pinang', 'IDN', 'Riau', '89900'), +('1024', 'Mumbai (Bombay)', 'IND', 'Maharashtra', '10500000'), +('1025', 'Delhi', 'IND', 'Delhi', '7206704'), +('1026', 'Calcutta [Kolkata]', 'IND', 'West Bengali', '4399819'), +('1027', 'Chennai (Madras)', 'IND', 'Tamil Nadu', '3841396'), +('1028', 'Hyderabad', 'IND', 'Andhra Pradesh', '2964638'), +('1029', 'Ahmedabad', 'IND', 'Gujarat', '2876710'), +('1030', 'Bangalore', 'IND', 'Karnataka', '2660088'), +('1031', 'Kanpur', 'IND', 'Uttar Pradesh', '1874409'), +('1032', 'Nagpur', 'IND', 'Maharashtra', '1624752'), +('1033', 'Lucknow', 'IND', 'Uttar Pradesh', '1619115'), +('1034', 'Pune', 'IND', 'Maharashtra', '1566651'), +('1035', 'Surat', 'IND', 'Gujarat', '1498817'), +('1036', 'Jaipur', 'IND', 'Rajasthan', '1458483'), +('1037', 'Indore', 'IND', 'Madhya Pradesh', '1091674'), +('1038', 'Bhopal', 'IND', 'Madhya Pradesh', '1062771'), +('1039', 'Ludhiana', 'IND', 'Punjab', '1042740'), +('1040', 'Vadodara (Baroda)', 'IND', 'Gujarat', '1031346'), +('1041', 'Kalyan', 'IND', 'Maharashtra', '1014557'), +('1042', 'Madurai', 'IND', 'Tamil Nadu', '977856'), +('1043', 'Haora (Howrah)', 'IND', 'West Bengali', '950435'), +('1044', 'Varanasi (Benares)', 'IND', 'Uttar Pradesh', '929270'), +('1045', 'Patna', 'IND', 'Bihar', '917243'), +('1046', 'Srinagar', 'IND', 'Jammu and Kashmir', '892506'), +('1047', 'Agra', 'IND', 'Uttar Pradesh', '891790'), +('1048', 'Coimbatore', 'IND', 'Tamil Nadu', '816321'), +('1049', 'Thane (Thana)', 'IND', 'Maharashtra', '803389'), +('1050', 'Allahabad', 'IND', 'Uttar Pradesh', '792858'), +('1051', 'Meerut', 'IND', 'Uttar Pradesh', '753778'), +('1052', 'Vishakhapatnam', 'IND', 'Andhra Pradesh', '752037'), +('1053', 'Jabalpur', 'IND', 'Madhya Pradesh', '741927'), +('1054', 'Amritsar', 'IND', 'Punjab', '708835'), +('1055', 'Faridabad', 'IND', 'Haryana', '703592'), +('1056', 'Vijayawada', 'IND', 'Andhra Pradesh', '701827'), +('1057', 'Gwalior', 'IND', 'Madhya Pradesh', '690765'), +('1058', 'Jodhpur', 'IND', 'Rajasthan', '666279'), +('1059', 'Nashik (Nasik)', 'IND', 'Maharashtra', '656925'), +('1060', 'Hubli-Dharwad', 'IND', 'Karnataka', '648298'), +('1061', 'Solapur (Sholapur)', 'IND', 'Maharashtra', '604215'), +('1062', 'Ranchi', 'IND', 'Jharkhand', '599306'), +('1063', 'Bareilly', 'IND', 'Uttar Pradesh', '587211'), +('1064', 'Guwahati (Gauhati)', 'IND', 'Assam', '584342'), +('1065', 'Shambajinagar (Aurangabad)', 'IND', 'Maharashtra', '573272'), +('1066', 'Cochin (Kochi)', 'IND', 'Kerala', '564589'), +('1067', 'Rajkot', 'IND', 'Gujarat', '559407'), +('1068', 'Kota', 'IND', 'Rajasthan', '537371'), +('1069', 'Thiruvananthapuram (Trivandrum', 'IND', 'Kerala', '524006'), +('1070', 'Pimpri-Chinchwad', 'IND', 'Maharashtra', '517083'), +('1071', 'Jalandhar (Jullundur)', 'IND', 'Punjab', '509510'), +('1072', 'Gorakhpur', 'IND', 'Uttar Pradesh', '505566'), +('1073', 'Chandigarh', 'IND', 'Chandigarh', '504094'), +('1074', 'Mysore', 'IND', 'Karnataka', '480692'), +('1075', 'Aligarh', 'IND', 'Uttar Pradesh', '480520'), +('1076', 'Guntur', 'IND', 'Andhra Pradesh', '471051'), +('1077', 'Jamshedpur', 'IND', 'Jharkhand', '460577'), +('1078', 'Ghaziabad', 'IND', 'Uttar Pradesh', '454156'), +('1079', 'Warangal', 'IND', 'Andhra Pradesh', '447657'), +('1080', 'Raipur', 'IND', 'Chhatisgarh', '438639'), +('1081', 'Moradabad', 'IND', 'Uttar Pradesh', '429214'), +('1082', 'Durgapur', 'IND', 'West Bengali', '425836'), +('1083', 'Amravati', 'IND', 'Maharashtra', '421576'), +('1084', 'Calicut (Kozhikode)', 'IND', 'Kerala', '419831'), +('1085', 'Bikaner', 'IND', 'Rajasthan', '416289'), +('1086', 'Bhubaneswar', 'IND', 'Orissa', '411542'), +('1087', 'Kolhapur', 'IND', 'Maharashtra', '406370'), +('1088', 'Kataka (Cuttack)', 'IND', 'Orissa', '403418'), +('1089', 'Ajmer', 'IND', 'Rajasthan', '402700'), +('1090', 'Bhavnagar', 'IND', 'Gujarat', '402338'), +('1091', 'Tiruchirapalli', 'IND', 'Tamil Nadu', '387223'), +('1092', 'Bhilai', 'IND', 'Chhatisgarh', '386159'), +('1093', 'Bhiwandi', 'IND', 'Maharashtra', '379070'), +('1094', 'Saharanpur', 'IND', 'Uttar Pradesh', '374945'), +('1095', 'Ulhasnagar', 'IND', 'Maharashtra', '369077'), +('1096', 'Salem', 'IND', 'Tamil Nadu', '366712'), +('1097', 'Ujjain', 'IND', 'Madhya Pradesh', '362266'), +('1098', 'Malegaon', 'IND', 'Maharashtra', '342595'), +('1099', 'Jamnagar', 'IND', 'Gujarat', '341637'), +('1100', 'Bokaro Steel City', 'IND', 'Jharkhand', '333683'), +('1101', 'Akola', 'IND', 'Maharashtra', '328034'), +('1102', 'Belgaum', 'IND', 'Karnataka', '326399'), +('1103', 'Rajahmundry', 'IND', 'Andhra Pradesh', '324851'), +('1104', 'Nellore', 'IND', 'Andhra Pradesh', '316606'), +('1105', 'Udaipur', 'IND', 'Rajasthan', '308571'), +('1106', 'New Bombay', 'IND', 'Maharashtra', '307297'), +('1107', 'Bhatpara', 'IND', 'West Bengali', '304952'), +('1108', 'Gulbarga', 'IND', 'Karnataka', '304099'), +('1109', 'New Delhi', 'IND', 'Delhi', '301297'), +('1110', 'Jhansi', 'IND', 'Uttar Pradesh', '300850'), +('1111', 'Gaya', 'IND', 'Bihar', '291675'), +('1112', 'Kakinada', 'IND', 'Andhra Pradesh', '279980'), +('1113', 'Dhule (Dhulia)', 'IND', 'Maharashtra', '278317'), +('1114', 'Panihati', 'IND', 'West Bengali', '275990'), +('1115', 'Nanded (Nander)', 'IND', 'Maharashtra', '275083'), +('1116', 'Mangalore', 'IND', 'Karnataka', '273304'), +('1117', 'Dehra Dun', 'IND', 'Uttaranchal', '270159'), +('1118', 'Kamarhati', 'IND', 'West Bengali', '266889'), +('1119', 'Davangere', 'IND', 'Karnataka', '266082'), +('1120', 'Asansol', 'IND', 'West Bengali', '262188'), +('1121', 'Bhagalpur', 'IND', 'Bihar', '253225'), +('1122', 'Bellary', 'IND', 'Karnataka', '245391'), +('1123', 'Barddhaman (Burdwan)', 'IND', 'West Bengali', '245079'), +('1124', 'Rampur', 'IND', 'Uttar Pradesh', '243742'), +('1125', 'Jalgaon', 'IND', 'Maharashtra', '242193'), +('1126', 'Muzaffarpur', 'IND', 'Bihar', '241107'), +('1127', 'Nizamabad', 'IND', 'Andhra Pradesh', '241034'), +('1128', 'Muzaffarnagar', 'IND', 'Uttar Pradesh', '240609'), +('1129', 'Patiala', 'IND', 'Punjab', '238368'), +('1130', 'Shahjahanpur', 'IND', 'Uttar Pradesh', '237713'), +('1131', 'Kurnool', 'IND', 'Andhra Pradesh', '236800'), +('1132', 'Tiruppur (Tirupper)', 'IND', 'Tamil Nadu', '235661'), +('1133', 'Rohtak', 'IND', 'Haryana', '233400'), +('1134', 'South Dum Dum', 'IND', 'West Bengali', '232811'), +('1135', 'Mathura', 'IND', 'Uttar Pradesh', '226691'), +('1136', 'Chandrapur', 'IND', 'Maharashtra', '226105'), +('1137', 'Barahanagar (Baranagar)', 'IND', 'West Bengali', '224821'), +('1138', 'Darbhanga', 'IND', 'Bihar', '218391'), +('1139', 'Siliguri (Shiliguri)', 'IND', 'West Bengali', '216950'), +('1140', 'Raurkela', 'IND', 'Orissa', '215489'), +('1141', 'Ambattur', 'IND', 'Tamil Nadu', '215424'), +('1142', 'Panipat', 'IND', 'Haryana', '215218'), +('1143', 'Firozabad', 'IND', 'Uttar Pradesh', '215128'), +('1144', 'Ichalkaranji', 'IND', 'Maharashtra', '214950'), +('1145', 'Jammu', 'IND', 'Jammu and Kashmir', '214737'), +('1146', 'Ramagundam', 'IND', 'Andhra Pradesh', '214384'), +('1147', 'Eluru', 'IND', 'Andhra Pradesh', '212866'), +('1148', 'Brahmapur', 'IND', 'Orissa', '210418'), +('1149', 'Alwar', 'IND', 'Rajasthan', '205086'), +('1150', 'Pondicherry', 'IND', 'Pondicherry', '203065'), +('1151', 'Thanjavur', 'IND', 'Tamil Nadu', '202013'), +('1152', 'Bihar Sharif', 'IND', 'Bihar', '201323'), +('1153', 'Tuticorin', 'IND', 'Tamil Nadu', '199854'), +('1154', 'Imphal', 'IND', 'Manipur', '198535'), +('1155', 'Latur', 'IND', 'Maharashtra', '197408'), +('1156', 'Sagar', 'IND', 'Madhya Pradesh', '195346'), +('1157', 'Farrukhabad-cum-Fatehgarh', 'IND', 'Uttar Pradesh', '194567'), +('1158', 'Sangli', 'IND', 'Maharashtra', '193197'), +('1159', 'Parbhani', 'IND', 'Maharashtra', '190255'), +('1160', 'Nagar Coil', 'IND', 'Tamil Nadu', '190084'), +('1161', 'Bijapur', 'IND', 'Karnataka', '186939'), +('1162', 'Kukatpalle', 'IND', 'Andhra Pradesh', '185378'), +('1163', 'Bally', 'IND', 'West Bengali', '184474'), +('1164', 'Bhilwara', 'IND', 'Rajasthan', '183965'), +('1165', 'Ratlam', 'IND', 'Madhya Pradesh', '183375'), +('1166', 'Avadi', 'IND', 'Tamil Nadu', '183215'), +('1167', 'Dindigul', 'IND', 'Tamil Nadu', '182477'), +('1168', 'Ahmadnagar', 'IND', 'Maharashtra', '181339'), +('1169', 'Bilaspur', 'IND', 'Chhatisgarh', '179833'), +('1170', 'Shimoga', 'IND', 'Karnataka', '179258'), +('1171', 'Kharagpur', 'IND', 'West Bengali', '177989'), +('1172', 'Mira Bhayandar', 'IND', 'Maharashtra', '175372'), +('1173', 'Vellore', 'IND', 'Tamil Nadu', '175061'), +('1174', 'Jalna', 'IND', 'Maharashtra', '174985'), +('1175', 'Burnpur', 'IND', 'West Bengali', '174933'), +('1176', 'Anantapur', 'IND', 'Andhra Pradesh', '174924'), +('1177', 'Allappuzha (Alleppey)', 'IND', 'Kerala', '174666'), +('1178', 'Tirupati', 'IND', 'Andhra Pradesh', '174369'), +('1179', 'Karnal', 'IND', 'Haryana', '173751'), +('1180', 'Burhanpur', 'IND', 'Madhya Pradesh', '172710'), +('1181', 'Hisar (Hissar)', 'IND', 'Haryana', '172677'), +('1182', 'Tiruvottiyur', 'IND', 'Tamil Nadu', '172562'), +('1183', 'Mirzapur-cum-Vindhyachal', 'IND', 'Uttar Pradesh', '169336'), +('1184', 'Secunderabad', 'IND', 'Andhra Pradesh', '167461'), +('1185', 'Nadiad', 'IND', 'Gujarat', '167051'), +('1186', 'Dewas', 'IND', 'Madhya Pradesh', '164364'), +('1187', 'Murwara (Katni)', 'IND', 'Madhya Pradesh', '163431'), +('1188', 'Ganganagar', 'IND', 'Rajasthan', '161482'), +('1189', 'Vizianagaram', 'IND', 'Andhra Pradesh', '160359'), +('1190', 'Erode', 'IND', 'Tamil Nadu', '159232'), +('1191', 'Machilipatnam (Masulipatam)', 'IND', 'Andhra Pradesh', '159110'), +('1192', 'Bhatinda (Bathinda)', 'IND', 'Punjab', '159042'), +('1193', 'Raichur', 'IND', 'Karnataka', '157551'), +('1194', 'Agartala', 'IND', 'Tripura', '157358'), +('1195', 'Arrah (Ara)', 'IND', 'Bihar', '157082'), +('1196', 'Satna', 'IND', 'Madhya Pradesh', '156630'), +('1197', 'Lalbahadur Nagar', 'IND', 'Andhra Pradesh', '155500'), +('1198', 'Aizawl', 'IND', 'Mizoram', '155240'), +('1199', 'Uluberia', 'IND', 'West Bengali', '155172'), +('1200', 'Katihar', 'IND', 'Bihar', '154367'), +('1201', 'Cuddalore', 'IND', 'Tamil Nadu', '153086'), +('1202', 'Hugli-Chinsurah', 'IND', 'West Bengali', '151806'), +('1203', 'Dhanbad', 'IND', 'Jharkhand', '151789'), +('1204', 'Raiganj', 'IND', 'West Bengali', '151045'), +('1205', 'Sambhal', 'IND', 'Uttar Pradesh', '150869'), +('1206', 'Durg', 'IND', 'Chhatisgarh', '150645'), +('1207', 'Munger (Monghyr)', 'IND', 'Bihar', '150112'), +('1208', 'Kanchipuram', 'IND', 'Tamil Nadu', '150100'), +('1209', 'North Dum Dum', 'IND', 'West Bengali', '149965'), +('1210', 'Karimnagar', 'IND', 'Andhra Pradesh', '148583'), +('1211', 'Bharatpur', 'IND', 'Rajasthan', '148519'), +('1212', 'Sikar', 'IND', 'Rajasthan', '148272'), +('1213', 'Hardwar (Haridwar)', 'IND', 'Uttaranchal', '147305'), +('1214', 'Dabgram', 'IND', 'West Bengali', '147217'), +('1215', 'Morena', 'IND', 'Madhya Pradesh', '147124'), +('1216', 'Noida', 'IND', 'Uttar Pradesh', '146514'), +('1217', 'Hapur', 'IND', 'Uttar Pradesh', '146262'), +('1218', 'Bhusawal', 'IND', 'Maharashtra', '145143'), +('1219', 'Khandwa', 'IND', 'Madhya Pradesh', '145133'), +('1220', 'Yamuna Nagar', 'IND', 'Haryana', '144346'), +('1221', 'Sonipat (Sonepat)', 'IND', 'Haryana', '143922'), +('1222', 'Tenali', 'IND', 'Andhra Pradesh', '143726'), +('1223', 'Raurkela Civil Township', 'IND', 'Orissa', '140408'), +('1224', 'Kollam (Quilon)', 'IND', 'Kerala', '139852'), +('1225', 'Kumbakonam', 'IND', 'Tamil Nadu', '139483'), +('1226', 'Ingraj Bazar (English Bazar)', 'IND', 'West Bengali', '139204'), +('1227', 'Timkur', 'IND', 'Karnataka', '138903'), +('1228', 'Amroha', 'IND', 'Uttar Pradesh', '137061'), +('1229', 'Serampore', 'IND', 'West Bengali', '137028'), +('1230', 'Chapra', 'IND', 'Bihar', '136877'), +('1231', 'Pali', 'IND', 'Rajasthan', '136842'), +('1232', 'Maunath Bhanjan', 'IND', 'Uttar Pradesh', '136697'), +('1233', 'Adoni', 'IND', 'Andhra Pradesh', '136182'), +('1234', 'Jaunpur', 'IND', 'Uttar Pradesh', '136062'), +('1235', 'Tirunelveli', 'IND', 'Tamil Nadu', '135825'), +('1236', 'Bahraich', 'IND', 'Uttar Pradesh', '135400'), +('1237', 'Gadag Betigeri', 'IND', 'Karnataka', '134051'), +('1238', 'Proddatur', 'IND', 'Andhra Pradesh', '133914'), +('1239', 'Chittoor', 'IND', 'Andhra Pradesh', '133462'), +('1240', 'Barrackpur', 'IND', 'West Bengali', '133265'), +('1241', 'Bharuch (Broach)', 'IND', 'Gujarat', '133102'), +('1242', 'Naihati', 'IND', 'West Bengali', '132701'), +('1243', 'Shillong', 'IND', 'Meghalaya', '131719'), +('1244', 'Sambalpur', 'IND', 'Orissa', '131138'), +('1245', 'Junagadh', 'IND', 'Gujarat', '130484'), +('1246', 'Rae Bareli', 'IND', 'Uttar Pradesh', '129904'), +('1247', 'Rewa', 'IND', 'Madhya Pradesh', '128981'), +('1248', 'Gurgaon', 'IND', 'Haryana', '128608'), +('1249', 'Khammam', 'IND', 'Andhra Pradesh', '127992'), +('1250', 'Bulandshahr', 'IND', 'Uttar Pradesh', '127201'), +('1251', 'Navsari', 'IND', 'Gujarat', '126089'), +('1252', 'Malkajgiri', 'IND', 'Andhra Pradesh', '126066'), +('1253', 'Midnapore (Medinipur)', 'IND', 'West Bengali', '125498'), +('1254', 'Miraj', 'IND', 'Maharashtra', '125407'), +('1255', 'Raj Nandgaon', 'IND', 'Chhatisgarh', '125371'), +('1256', 'Alandur', 'IND', 'Tamil Nadu', '125244'), +('1257', 'Puri', 'IND', 'Orissa', '125199'), +('1258', 'Navadwip', 'IND', 'West Bengali', '125037'), +('1259', 'Sirsa', 'IND', 'Haryana', '125000'), +('1260', 'Korba', 'IND', 'Chhatisgarh', '124501'), +('1261', 'Faizabad', 'IND', 'Uttar Pradesh', '124437'), +('1262', 'Etawah', 'IND', 'Uttar Pradesh', '124072'), +('1263', 'Pathankot', 'IND', 'Punjab', '123930'), +('1264', 'Gandhinagar', 'IND', 'Gujarat', '123359'), +('1265', 'Palghat (Palakkad)', 'IND', 'Kerala', '123289'), +('1266', 'Veraval', 'IND', 'Gujarat', '123000'), +('1267', 'Hoshiarpur', 'IND', 'Punjab', '122705'), +('1268', 'Ambala', 'IND', 'Haryana', '122596'), +('1269', 'Sitapur', 'IND', 'Uttar Pradesh', '121842'), +('1270', 'Bhiwani', 'IND', 'Haryana', '121629'), +('1271', 'Cuddapah', 'IND', 'Andhra Pradesh', '121463'), +('1272', 'Bhimavaram', 'IND', 'Andhra Pradesh', '121314'), +('1273', 'Krishnanagar', 'IND', 'West Bengali', '121110'), +('1274', 'Chandannagar', 'IND', 'West Bengali', '120378'), +('1275', 'Mandya', 'IND', 'Karnataka', '120265'), +('1276', 'Dibrugarh', 'IND', 'Assam', '120127'), +('1277', 'Nandyal', 'IND', 'Andhra Pradesh', '119813'), +('1278', 'Balurghat', 'IND', 'West Bengali', '119796'), +('1279', 'Neyveli', 'IND', 'Tamil Nadu', '118080'), +('1280', 'Fatehpur', 'IND', 'Uttar Pradesh', '117675'), +('1281', 'Mahbubnagar', 'IND', 'Andhra Pradesh', '116833'), +('1282', 'Budaun', 'IND', 'Uttar Pradesh', '116695'), +('1283', 'Porbandar', 'IND', 'Gujarat', '116671'), +('1284', 'Silchar', 'IND', 'Assam', '115483'), +('1285', 'Berhampore (Baharampur)', 'IND', 'West Bengali', '115144'), +('1286', 'Purnea (Purnia)', 'IND', 'Jharkhand', '114912'), +('1287', 'Bankura', 'IND', 'West Bengali', '114876'), +('1288', 'Rajapalaiyam', 'IND', 'Tamil Nadu', '114202'), +('1289', 'Titagarh', 'IND', 'West Bengali', '114085'), +('1290', 'Halisahar', 'IND', 'West Bengali', '114028'), +('1291', 'Hathras', 'IND', 'Uttar Pradesh', '113285'), +('1292', 'Bhir (Bid)', 'IND', 'Maharashtra', '112434'), +('1293', 'Pallavaram', 'IND', 'Tamil Nadu', '111866'), +('1294', 'Anand', 'IND', 'Gujarat', '110266'), +('1295', 'Mango', 'IND', 'Jharkhand', '110024'), +('1296', 'Santipur', 'IND', 'West Bengali', '109956'), +('1297', 'Bhind', 'IND', 'Madhya Pradesh', '109755'), +('1298', 'Gondiya', 'IND', 'Maharashtra', '109470'), +('1299', 'Tiruvannamalai', 'IND', 'Tamil Nadu', '109196'), +('1300', 'Yeotmal (Yavatmal)', 'IND', 'Maharashtra', '108578'), +('1301', 'Kulti-Barakar', 'IND', 'West Bengali', '108518'), +('1302', 'Moga', 'IND', 'Punjab', '108304'), +('1303', 'Shivapuri', 'IND', 'Madhya Pradesh', '108277'), +('1304', 'Bidar', 'IND', 'Karnataka', '108016'), +('1305', 'Guntakal', 'IND', 'Andhra Pradesh', '107592'), +('1306', 'Unnao', 'IND', 'Uttar Pradesh', '107425'), +('1307', 'Barasat', 'IND', 'West Bengali', '107365'), +('1308', 'Tambaram', 'IND', 'Tamil Nadu', '107187'), +('1309', 'Abohar', 'IND', 'Punjab', '107163'), +('1310', 'Pilibhit', 'IND', 'Uttar Pradesh', '106605'), +('1311', 'Valparai', 'IND', 'Tamil Nadu', '106523'), +('1312', 'Gonda', 'IND', 'Uttar Pradesh', '106078'), +('1313', 'Surendranagar', 'IND', 'Gujarat', '105973'), +('1314', 'Qutubullapur', 'IND', 'Andhra Pradesh', '105380'), +('1315', 'Beawar', 'IND', 'Rajasthan', '105363'), +('1316', 'Hindupur', 'IND', 'Andhra Pradesh', '104651'), +('1317', 'Gandhidham', 'IND', 'Gujarat', '104585'), +('1318', 'Haldwani-cum-Kathgodam', 'IND', 'Uttaranchal', '104195'), +('1319', 'Tellicherry (Thalassery)', 'IND', 'Kerala', '103579'), +('1320', 'Wardha', 'IND', 'Maharashtra', '102985'), +('1321', 'Rishra', 'IND', 'West Bengali', '102649'), +('1322', 'Bhuj', 'IND', 'Gujarat', '102176'), +('1323', 'Modinagar', 'IND', 'Uttar Pradesh', '101660'), +('1324', 'Gudivada', 'IND', 'Andhra Pradesh', '101656'), +('1325', 'Basirhat', 'IND', 'West Bengali', '101409'), +('1326', 'Uttarpara-Kotrung', 'IND', 'West Bengali', '100867'), +('1327', 'Ongole', 'IND', 'Andhra Pradesh', '100836'), +('1328', 'North Barrackpur', 'IND', 'West Bengali', '100513'), +('1329', 'Guna', 'IND', 'Madhya Pradesh', '100490'), +('1330', 'Haldia', 'IND', 'West Bengali', '100347'), +('1331', 'Habra', 'IND', 'West Bengali', '100223'), +('1332', 'Kanchrapara', 'IND', 'West Bengali', '100194'), +('1333', 'Tonk', 'IND', 'Rajasthan', '100079'), +('1334', 'Champdani', 'IND', 'West Bengali', '98818'), +('1335', 'Orai', 'IND', 'Uttar Pradesh', '98640'), +('1336', 'Pudukkottai', 'IND', 'Tamil Nadu', '98619'), +('1337', 'Sasaram', 'IND', 'Bihar', '98220'), +('1338', 'Hazaribag', 'IND', 'Jharkhand', '97712'), +('1339', 'Palayankottai', 'IND', 'Tamil Nadu', '97662'), +('1340', 'Banda', 'IND', 'Uttar Pradesh', '97227'), +('1341', 'Godhra', 'IND', 'Gujarat', '96813'), +('1342', 'Hospet', 'IND', 'Karnataka', '96322'), +('1343', 'Ashoknagar-Kalyangarh', 'IND', 'West Bengali', '96315'), +('1344', 'Achalpur', 'IND', 'Maharashtra', '96216'), +('1345', 'Patan', 'IND', 'Gujarat', '96109'), +('1346', 'Mandasor', 'IND', 'Madhya Pradesh', '95758'), +('1347', 'Damoh', 'IND', 'Madhya Pradesh', '95661'), +('1348', 'Satara', 'IND', 'Maharashtra', '95133'), +('1349', 'Meerut Cantonment', 'IND', 'Uttar Pradesh', '94876'), +('1350', 'Dehri', 'IND', 'Bihar', '94526'), +('1351', 'Delhi Cantonment', 'IND', 'Delhi', '94326'), +('1352', 'Chhindwara', 'IND', 'Madhya Pradesh', '93731'), +('1353', 'Bansberia', 'IND', 'West Bengali', '93447'), +('1354', 'Nagaon', 'IND', 'Assam', '93350'), +('1355', 'Kanpur Cantonment', 'IND', 'Uttar Pradesh', '93109'), +('1356', 'Vidisha', 'IND', 'Madhya Pradesh', '92917'), +('1357', 'Bettiah', 'IND', 'Bihar', '92583'), +('1358', 'Purulia', 'IND', 'Jharkhand', '92574'), +('1359', 'Hassan', 'IND', 'Karnataka', '90803'), +('1360', 'Ambala Sadar', 'IND', 'Haryana', '90712'), +('1361', 'Baidyabati', 'IND', 'West Bengali', '90601'), +('1362', 'Morvi', 'IND', 'Gujarat', '90357'), +('1363', 'Raigarh', 'IND', 'Chhatisgarh', '89166'), +('1364', 'Vejalpur', 'IND', 'Gujarat', '89053'), +('1365', 'Baghdad', 'IRQ', 'Baghdad', '4336000'), +('1366', 'Mosul', 'IRQ', 'Ninawa', '879000'), +('1367', 'Irbil', 'IRQ', 'Irbil', '485968'), +('1368', 'Kirkuk', 'IRQ', 'al-Tamim', '418624'), +('1369', 'Basra', 'IRQ', 'Basra', '406296'), +('1370', 'al-Sulaymaniya', 'IRQ', 'al-Sulaymaniya', '364096'), +('1371', 'al-Najaf', 'IRQ', 'al-Najaf', '309010'), +('1372', 'Karbala', 'IRQ', 'Karbala', '296705'), +('1373', 'al-Hilla', 'IRQ', 'Babil', '268834'), +('1374', 'al-Nasiriya', 'IRQ', 'DhiQar', '265937'), +('1375', 'al-Amara', 'IRQ', 'Maysan', '208797'), +('1376', 'al-Diwaniya', 'IRQ', 'al-Qadisiya', '196519'), +('1377', 'al-Ramadi', 'IRQ', 'al-Anbar', '192556'), +('1378', 'al-Kut', 'IRQ', 'Wasit', '183183'), +('1379', 'Baquba', 'IRQ', 'Diyala', '114516'), +('1380', 'Teheran', 'IRN', 'Teheran', '6758845'), +('1381', 'Mashhad', 'IRN', 'Khorasan', '1887405'), +('1382', 'Esfahan', 'IRN', 'Esfahan', '1266072'), +('1383', 'Tabriz', 'IRN', 'East Azerbaidzan', '1191043'), +('1384', 'Shiraz', 'IRN', 'Fars', '1053025'), +('1385', 'Karaj', 'IRN', 'Teheran', '940968'), +('1386', 'Ahvaz', 'IRN', 'Khuzestan', '804980'), +('1387', 'Qom', 'IRN', 'Qom', '777677'), +('1388', 'Kermanshah', 'IRN', 'Kermanshah', '692986'), +('1389', 'Urmia', 'IRN', 'West Azerbaidzan', '435200'), +('1390', 'Zahedan', 'IRN', 'Sistan va Baluchesta', '419518'), +('1391', 'Rasht', 'IRN', 'Gilan', '417748'), +('1392', 'Hamadan', 'IRN', 'Hamadan', '401281'), +('1393', 'Kerman', 'IRN', 'Kerman', '384991'), +('1394', 'Arak', 'IRN', 'Markazi', '380755'), +('1395', 'Ardebil', 'IRN', 'Ardebil', '340386'), +('1396', 'Yazd', 'IRN', 'Yazd', '326776'), +('1397', 'Qazvin', 'IRN', 'Qazvin', '291117'), +('1398', 'Zanjan', 'IRN', 'Zanjan', '286295'), +('1399', 'Sanandaj', 'IRN', 'Kordestan', '277808'), +('1400', 'Bandar-e-Abbas', 'IRN', 'Hormozgan', '273578'), +('1401', 'Khorramabad', 'IRN', 'Lorestan', '272815'), +('1402', 'Eslamshahr', 'IRN', 'Teheran', '265450'), +('1403', 'Borujerd', 'IRN', 'Lorestan', '217804'), +('1404', 'Abadan', 'IRN', 'Khuzestan', '206073'), +('1405', 'Dezful', 'IRN', 'Khuzestan', '202639'), +('1406', 'Kashan', 'IRN', 'Esfahan', '201372'), +('1407', 'Sari', 'IRN', 'Mazandaran', '195882'), +('1408', 'Gorgan', 'IRN', 'Golestan', '188710'), +('1409', 'Najafabad', 'IRN', 'Esfahan', '178498'), +('1410', 'Sabzevar', 'IRN', 'Khorasan', '170738'), +('1411', 'Khomeynishahr', 'IRN', 'Esfahan', '165888'), +('1412', 'Amol', 'IRN', 'Mazandaran', '159092'), +('1413', 'Neyshabur', 'IRN', 'Khorasan', '158847'), +('1414', 'Babol', 'IRN', 'Mazandaran', '158346'), +('1415', 'Khoy', 'IRN', 'West Azerbaidzan', '148944'), +('1416', 'Malayer', 'IRN', 'Hamadan', '144373'), +('1417', 'Bushehr', 'IRN', 'Bushehr', '143641'), +('1418', 'Qaemshahr', 'IRN', 'Mazandaran', '143286'), +('1419', 'Qarchak', 'IRN', 'Teheran', '142690'), +('1420', 'Qods', 'IRN', 'Teheran', '138278'), +('1421', 'Sirjan', 'IRN', 'Kerman', '135024'), +('1422', 'Bojnurd', 'IRN', 'Khorasan', '134835'), +('1423', 'Maragheh', 'IRN', 'East Azerbaidzan', '132318'), +('1424', 'Birjand', 'IRN', 'Khorasan', '127608'), +('1425', 'Ilam', 'IRN', 'Ilam', '126346'), +('1426', 'Bukan', 'IRN', 'West Azerbaidzan', '120020'), +('1427', 'Masjed-e-Soleyman', 'IRN', 'Khuzestan', '116883'), +('1428', 'Saqqez', 'IRN', 'Kordestan', '115394'), +('1429', 'Gonbad-e Qabus', 'IRN', 'Mazandaran', '111253'), +('1430', 'Saveh', 'IRN', 'Qom', '111245'), +('1431', 'Mahabad', 'IRN', 'West Azerbaidzan', '107799'), +('1432', 'Varamin', 'IRN', 'Teheran', '107233'), +('1433', 'Andimeshk', 'IRN', 'Khuzestan', '106923'), +('1434', 'Khorramshahr', 'IRN', 'Khuzestan', '105636'), +('1435', 'Shahrud', 'IRN', 'Semnan', '104765'), +('1436', 'Marv Dasht', 'IRN', 'Fars', '103579'), +('1437', 'Zabol', 'IRN', 'Sistan va Baluchesta', '100887'), +('1438', 'Shahr-e Kord', 'IRN', 'Chaharmahal va Bakht', '100477'), +('1439', 'Bandar-e Anzali', 'IRN', 'Gilan', '98500'), +('1440', 'Rafsanjan', 'IRN', 'Kerman', '98300'), +('1441', 'Marand', 'IRN', 'East Azerbaidzan', '96400'), +('1442', 'Torbat-e Heydariyeh', 'IRN', 'Khorasan', '94600'), +('1443', 'Jahrom', 'IRN', 'Fars', '94200'), +('1444', 'Semnan', 'IRN', 'Semnan', '91045'), +('1445', 'Miandoab', 'IRN', 'West Azerbaidzan', '90100'), +('1446', 'Qomsheh', 'IRN', 'Esfahan', '89800'), +('1447', 'Dublin', 'IRL', 'Leinster', '481854'), +('1448', 'Cork', 'IRL', 'Munster', '127187'), +('1449', 'Reykjavík', 'ISL', 'Höfuđborgarsvćđi', '109184'), +('1450', 'Jerusalem', 'ISR', 'Jerusalem', '633700'), +('1451', 'Tel Aviv-Jaffa', 'ISR', 'Tel Aviv', '348100'), +('1452', 'Haifa', 'ISR', 'Haifa', '265700'), +('1453', 'Rishon Le Ziyyon', 'ISR', 'Ha Merkaz', '188200'), +('1454', 'Beerseba', 'ISR', 'Ha Darom', '163700'), +('1455', 'Holon', 'ISR', 'Tel Aviv', '163100'), +('1456', 'Petah Tiqwa', 'ISR', 'Ha Merkaz', '159400'), +('1457', 'Ashdod', 'ISR', 'Ha Darom', '155800'), +('1458', 'Netanya', 'ISR', 'Ha Merkaz', '154900'), +('1459', 'Bat Yam', 'ISR', 'Tel Aviv', '137000'), +('1460', 'Bene Beraq', 'ISR', 'Tel Aviv', '133900'), +('1461', 'Ramat Gan', 'ISR', 'Tel Aviv', '126900'), +('1462', 'Ashqelon', 'ISR', 'Ha Darom', '92300'), +('1463', 'Rehovot', 'ISR', 'Ha Merkaz', '90300'), +('1464', 'Roma', 'ITA', 'Latium', '2643581'), +('1465', 'Milano', 'ITA', 'Lombardia', '1300977'), +('1466', 'Napoli', 'ITA', 'Campania', '1002619'), +('1467', 'Torino', 'ITA', 'Piemonte', '903705'), +('1468', 'Palermo', 'ITA', 'Sisilia', '683794'), +('1469', 'Genova', 'ITA', 'Liguria', '636104'), +('1470', 'Bologna', 'ITA', 'Emilia-Romagna', '381161'), +('1471', 'Firenze', 'ITA', 'Toscana', '376662'), +('1472', 'Catania', 'ITA', 'Sisilia', '337862'), +('1473', 'Bari', 'ITA', 'Apulia', '331848'), +('1474', 'Venezia', 'ITA', 'Veneto', '277305'), +('1475', 'Messina', 'ITA', 'Sisilia', '259156'), +('1476', 'Verona', 'ITA', 'Veneto', '255268'), +('1477', 'Trieste', 'ITA', 'Friuli-Venezia Giuli', '216459'), +('1478', 'Padova', 'ITA', 'Veneto', '211391'), +('1479', 'Taranto', 'ITA', 'Apulia', '208214'), +('1480', 'Brescia', 'ITA', 'Lombardia', '191317'), +('1481', 'Reggio di Calabria', 'ITA', 'Calabria', '179617'), +('1482', 'Modena', 'ITA', 'Emilia-Romagna', '176022'), +('1483', 'Prato', 'ITA', 'Toscana', '172473'), +('1484', 'Parma', 'ITA', 'Emilia-Romagna', '168717'), +('1485', 'Cagliari', 'ITA', 'Sardinia', '165926'), +('1486', 'Livorno', 'ITA', 'Toscana', '161673'), +('1487', 'Perugia', 'ITA', 'Umbria', '156673'), +('1488', 'Foggia', 'ITA', 'Apulia', '154891'), +('1489', 'Reggio nell´ Emilia', 'ITA', 'Emilia-Romagna', '143664'), +('1490', 'Salerno', 'ITA', 'Campania', '142055'), +('1491', 'Ravenna', 'ITA', 'Emilia-Romagna', '138418'), +('1492', 'Ferrara', 'ITA', 'Emilia-Romagna', '132127'), +('1493', 'Rimini', 'ITA', 'Emilia-Romagna', '131062'), +('1494', 'Syrakusa', 'ITA', 'Sisilia', '126282'), +('1495', 'Sassari', 'ITA', 'Sardinia', '120803'), +('1496', 'Monza', 'ITA', 'Lombardia', '119516'), +('1497', 'Bergamo', 'ITA', 'Lombardia', '117837'), +('1498', 'Pescara', 'ITA', 'Abruzzit', '115698'), +('1499', 'Latina', 'ITA', 'Latium', '114099'), +('1500', 'Vicenza', 'ITA', 'Veneto', '109738'), +('1501', 'Terni', 'ITA', 'Umbria', '107770'), +('1502', 'Forlě', 'ITA', 'Emilia-Romagna', '107475'), +('1503', 'Trento', 'ITA', 'Trentino-Alto Adige', '104906'), +('1504', 'Novara', 'ITA', 'Piemonte', '102037'), +('1505', 'Piacenza', 'ITA', 'Emilia-Romagna', '98384'), +('1506', 'Ancona', 'ITA', 'Marche', '98329'), +('1507', 'Lecce', 'ITA', 'Apulia', '98208'), +('1508', 'Bolzano', 'ITA', 'Trentino-Alto Adige', '97232'), +('1509', 'Catanzaro', 'ITA', 'Calabria', '96700'), +('1510', 'La Spezia', 'ITA', 'Liguria', '95504'), +('1511', 'Udine', 'ITA', 'Friuli-Venezia Giuli', '94932'), +('1512', 'Torre del Greco', 'ITA', 'Campania', '94505'), +('1513', 'Andria', 'ITA', 'Apulia', '94443'), +('1514', 'Brindisi', 'ITA', 'Apulia', '93454'), +('1515', 'Giugliano in Campania', 'ITA', 'Campania', '93286'), +('1516', 'Pisa', 'ITA', 'Toscana', '92379'), +('1517', 'Barletta', 'ITA', 'Apulia', '91904'), +('1518', 'Arezzo', 'ITA', 'Toscana', '91729'), +('1519', 'Alessandria', 'ITA', 'Piemonte', '90289'), +('1520', 'Cesena', 'ITA', 'Emilia-Romagna', '89852'), +('1521', 'Pesaro', 'ITA', 'Marche', '88987'), +('1522', 'Dili', 'TMP', 'Dili', '47900'), +('1523', 'Wien', 'AUT', 'Wien', '1608144'), +('1524', 'Graz', 'AUT', 'Steiermark', '240967'), +('1525', 'Linz', 'AUT', 'North Austria', '188022'), +('1526', 'Salzburg', 'AUT', 'Salzburg', '144247'), +('1527', 'Innsbruck', 'AUT', 'Tiroli', '111752'), +('1528', 'Klagenfurt', 'AUT', 'Kärnten', '91141'), +('1529', 'Spanish Town', 'JAM', 'St. Catherine', '110379'), +('1530', 'Kingston', 'JAM', 'St. Andrew', '103962'), +('1531', 'Portmore', 'JAM', 'St. Andrew', '99799'), +('1532', 'Tokyo', 'JPN', 'Tokyo-to', '7980230'), +('1533', 'Jokohama [Yokohama]', 'JPN', 'Kanagawa', '3339594'), +('1534', 'Osaka', 'JPN', 'Osaka', '2595674'), +('1535', 'Nagoya', 'JPN', 'Aichi', '2154376'), +('1536', 'Sapporo', 'JPN', 'Hokkaido', '1790886'), +('1537', 'Kioto', 'JPN', 'Kyoto', '1461974'), +('1538', 'Kobe', 'JPN', 'Hyogo', '1425139'), +('1539', 'Fukuoka', 'JPN', 'Fukuoka', '1308379'), +('1540', 'Kawasaki', 'JPN', 'Kanagawa', '1217359'), +('1541', 'Hiroshima', 'JPN', 'Hiroshima', '1119117'), +('1542', 'Kitakyushu', 'JPN', 'Fukuoka', '1016264'), +('1543', 'Sendai', 'JPN', 'Miyagi', '989975'), +('1544', 'Chiba', 'JPN', 'Chiba', '863930'), +('1545', 'Sakai', 'JPN', 'Osaka', '797735'), +('1546', 'Kumamoto', 'JPN', 'Kumamoto', '656734'), +('1547', 'Okayama', 'JPN', 'Okayama', '624269'), +('1548', 'Sagamihara', 'JPN', 'Kanagawa', '586300'), +('1549', 'Hamamatsu', 'JPN', 'Shizuoka', '568796'), +('1550', 'Kagoshima', 'JPN', 'Kagoshima', '549977'), +('1551', 'Funabashi', 'JPN', 'Chiba', '545299'), +('1552', 'Higashiosaka', 'JPN', 'Osaka', '517785'), +('1553', 'Hachioji', 'JPN', 'Tokyo-to', '513451'), +('1554', 'Niigata', 'JPN', 'Niigata', '497464'), +('1555', 'Amagasaki', 'JPN', 'Hyogo', '481434'), +('1556', 'Himeji', 'JPN', 'Hyogo', '475167'), +('1557', 'Shizuoka', 'JPN', 'Shizuoka', '473854'), +('1558', 'Urawa', 'JPN', 'Saitama', '469675'), +('1559', 'Matsuyama', 'JPN', 'Ehime', '466133'), +('1560', 'Matsudo', 'JPN', 'Chiba', '461126'), +('1561', 'Kanazawa', 'JPN', 'Ishikawa', '455386'), +('1562', 'Kawaguchi', 'JPN', 'Saitama', '452155'), +('1563', 'Ichikawa', 'JPN', 'Chiba', '441893'), +('1564', 'Omiya', 'JPN', 'Saitama', '441649'), +('1565', 'Utsunomiya', 'JPN', 'Tochigi', '440353'), +('1566', 'Oita', 'JPN', 'Oita', '433401'), +('1567', 'Nagasaki', 'JPN', 'Nagasaki', '432759'), +('1568', 'Yokosuka', 'JPN', 'Kanagawa', '430200'), +('1569', 'Kurashiki', 'JPN', 'Okayama', '425103'), +('1570', 'Gifu', 'JPN', 'Gifu', '408007'), +('1571', 'Hirakata', 'JPN', 'Osaka', '403151'), +('1572', 'Nishinomiya', 'JPN', 'Hyogo', '397618'), +('1573', 'Toyonaka', 'JPN', 'Osaka', '396689'), +('1574', 'Wakayama', 'JPN', 'Wakayama', '391233'), +('1575', 'Fukuyama', 'JPN', 'Hiroshima', '376921'), +('1576', 'Fujisawa', 'JPN', 'Kanagawa', '372840'), +('1577', 'Asahikawa', 'JPN', 'Hokkaido', '364813'), +('1578', 'Machida', 'JPN', 'Tokyo-to', '364197'), +('1579', 'Nara', 'JPN', 'Nara', '362812'), +('1580', 'Takatsuki', 'JPN', 'Osaka', '361747'), +('1581', 'Iwaki', 'JPN', 'Fukushima', '361737'), +('1582', 'Nagano', 'JPN', 'Nagano', '361391'), +('1583', 'Toyohashi', 'JPN', 'Aichi', '360066'), +('1584', 'Toyota', 'JPN', 'Aichi', '346090'), +('1585', 'Suita', 'JPN', 'Osaka', '345750'), +('1586', 'Takamatsu', 'JPN', 'Kagawa', '332471'), +('1587', 'Koriyama', 'JPN', 'Fukushima', '330335'), +('1588', 'Okazaki', 'JPN', 'Aichi', '328711'), +('1589', 'Kawagoe', 'JPN', 'Saitama', '327211'), +('1590', 'Tokorozawa', 'JPN', 'Saitama', '325809'), +('1591', 'Toyama', 'JPN', 'Toyama', '325790'), +('1592', 'Kochi', 'JPN', 'Kochi', '324710'), +('1593', 'Kashiwa', 'JPN', 'Chiba', '320296'), +('1594', 'Akita', 'JPN', 'Akita', '314440'), +('1595', 'Miyazaki', 'JPN', 'Miyazaki', '303784'), +('1596', 'Koshigaya', 'JPN', 'Saitama', '301446'), +('1597', 'Naha', 'JPN', 'Okinawa', '299851'), +('1598', 'Aomori', 'JPN', 'Aomori', '295969'), +('1599', 'Hakodate', 'JPN', 'Hokkaido', '294788'), +('1600', 'Akashi', 'JPN', 'Hyogo', '292253'), +('1601', 'Yokkaichi', 'JPN', 'Mie', '288173'), +('1602', 'Fukushima', 'JPN', 'Fukushima', '287525'), +('1603', 'Morioka', 'JPN', 'Iwate', '287353'), +('1604', 'Maebashi', 'JPN', 'Gumma', '284473'), +('1605', 'Kasugai', 'JPN', 'Aichi', '282348'), +('1606', 'Otsu', 'JPN', 'Shiga', '282070'), +('1607', 'Ichihara', 'JPN', 'Chiba', '279280'), +('1608', 'Yao', 'JPN', 'Osaka', '276421'), +('1609', 'Ichinomiya', 'JPN', 'Aichi', '270828'), +('1610', 'Tokushima', 'JPN', 'Tokushima', '269649'), +('1611', 'Kakogawa', 'JPN', 'Hyogo', '266281'), +('1612', 'Ibaraki', 'JPN', 'Osaka', '261020'), +('1613', 'Neyagawa', 'JPN', 'Osaka', '257315'), +('1614', 'Shimonoseki', 'JPN', 'Yamaguchi', '257263'), +('1615', 'Yamagata', 'JPN', 'Yamagata', '255617'), +('1616', 'Fukui', 'JPN', 'Fukui', '254818'), +('1617', 'Hiratsuka', 'JPN', 'Kanagawa', '254207'), +('1618', 'Mito', 'JPN', 'Ibaragi', '246559'), +('1619', 'Sasebo', 'JPN', 'Nagasaki', '244240'), +('1620', 'Hachinohe', 'JPN', 'Aomori', '242979'), +('1621', 'Takasaki', 'JPN', 'Gumma', '239124'), +('1622', 'Shimizu', 'JPN', 'Shizuoka', '239123'), +('1623', 'Kurume', 'JPN', 'Fukuoka', '235611'), +('1624', 'Fuji', 'JPN', 'Shizuoka', '231527'), +('1625', 'Soka', 'JPN', 'Saitama', '222768'), +('1626', 'Fuchu', 'JPN', 'Tokyo-to', '220576'), +('1627', 'Chigasaki', 'JPN', 'Kanagawa', '216015'), +('1628', 'Atsugi', 'JPN', 'Kanagawa', '212407'), +('1629', 'Numazu', 'JPN', 'Shizuoka', '211382'), +('1630', 'Ageo', 'JPN', 'Saitama', '209442'), +('1631', 'Yamato', 'JPN', 'Kanagawa', '208234'), +('1632', 'Matsumoto', 'JPN', 'Nagano', '206801'), +('1633', 'Kure', 'JPN', 'Hiroshima', '206504'), +('1634', 'Takarazuka', 'JPN', 'Hyogo', '205993'), +('1635', 'Kasukabe', 'JPN', 'Saitama', '201838'), +('1636', 'Chofu', 'JPN', 'Tokyo-to', '201585'), +('1637', 'Odawara', 'JPN', 'Kanagawa', '200171'), +('1638', 'Kofu', 'JPN', 'Yamanashi', '199753'), +('1639', 'Kushiro', 'JPN', 'Hokkaido', '197608'), +('1640', 'Kishiwada', 'JPN', 'Osaka', '197276'), +('1641', 'Hitachi', 'JPN', 'Ibaragi', '196622'), +('1642', 'Nagaoka', 'JPN', 'Niigata', '192407'), +('1643', 'Itami', 'JPN', 'Hyogo', '190886'), +('1644', 'Uji', 'JPN', 'Kyoto', '188735'), +('1645', 'Suzuka', 'JPN', 'Mie', '184061'), +('1646', 'Hirosaki', 'JPN', 'Aomori', '177522'), +('1647', 'Ube', 'JPN', 'Yamaguchi', '175206'), +('1648', 'Kodaira', 'JPN', 'Tokyo-to', '174984'), +('1649', 'Takaoka', 'JPN', 'Toyama', '174380'), +('1650', 'Obihiro', 'JPN', 'Hokkaido', '173685'), +('1651', 'Tomakomai', 'JPN', 'Hokkaido', '171958'), +('1652', 'Saga', 'JPN', 'Saga', '170034'), +('1653', 'Sakura', 'JPN', 'Chiba', '168072'), +('1654', 'Kamakura', 'JPN', 'Kanagawa', '167661'), +('1655', 'Mitaka', 'JPN', 'Tokyo-to', '167268'), +('1656', 'Izumi', 'JPN', 'Osaka', '166979'), +('1657', 'Hino', 'JPN', 'Tokyo-to', '166770'), +('1658', 'Hadano', 'JPN', 'Kanagawa', '166512'), +('1659', 'Ashikaga', 'JPN', 'Tochigi', '165243'), +('1660', 'Tsu', 'JPN', 'Mie', '164543'), +('1661', 'Sayama', 'JPN', 'Saitama', '162472'), +('1662', 'Yachiyo', 'JPN', 'Chiba', '161222'), +('1663', 'Tsukuba', 'JPN', 'Ibaragi', '160768'), +('1664', 'Tachikawa', 'JPN', 'Tokyo-to', '159430'), +('1665', 'Kumagaya', 'JPN', 'Saitama', '157171'), +('1666', 'Moriguchi', 'JPN', 'Osaka', '155941'), +('1667', 'Otaru', 'JPN', 'Hokkaido', '155784'), +('1668', 'Anjo', 'JPN', 'Aichi', '153823'), +('1669', 'Narashino', 'JPN', 'Chiba', '152849'), +('1670', 'Oyama', 'JPN', 'Tochigi', '152820'), +('1671', 'Ogaki', 'JPN', 'Gifu', '151758'), +('1672', 'Matsue', 'JPN', 'Shimane', '149821'), +('1673', 'Kawanishi', 'JPN', 'Hyogo', '149794'), +('1674', 'Hitachinaka', 'JPN', 'Tokyo-to', '148006'), +('1675', 'Niiza', 'JPN', 'Saitama', '147744'), +('1676', 'Nagareyama', 'JPN', 'Chiba', '147738'), +('1677', 'Tottori', 'JPN', 'Tottori', '147523'), +('1678', 'Tama', 'JPN', 'Ibaragi', '146712'), +('1679', 'Iruma', 'JPN', 'Saitama', '145922'), +('1680', 'Ota', 'JPN', 'Gumma', '145317'), +('1681', 'Omuta', 'JPN', 'Fukuoka', '142889'), +('1682', 'Komaki', 'JPN', 'Aichi', '139827'), +('1683', 'Ome', 'JPN', 'Tokyo-to', '139216'), +('1684', 'Kadoma', 'JPN', 'Osaka', '138953'), +('1685', 'Yamaguchi', 'JPN', 'Yamaguchi', '138210'), +('1686', 'Higashimurayama', 'JPN', 'Tokyo-to', '136970'), +('1687', 'Yonago', 'JPN', 'Tottori', '136461'), +('1688', 'Matsubara', 'JPN', 'Osaka', '135010'), +('1689', 'Musashino', 'JPN', 'Tokyo-to', '134426'), +('1690', 'Tsuchiura', 'JPN', 'Ibaragi', '134072'), +('1691', 'Joetsu', 'JPN', 'Niigata', '133505'), +('1692', 'Miyakonojo', 'JPN', 'Miyazaki', '133183'), +('1693', 'Misato', 'JPN', 'Saitama', '132957'), +('1694', 'Kakamigahara', 'JPN', 'Gifu', '131831'), +('1695', 'Daito', 'JPN', 'Osaka', '130594'), +('1696', 'Seto', 'JPN', 'Aichi', '130470'), +('1697', 'Kariya', 'JPN', 'Aichi', '127969'), +('1698', 'Urayasu', 'JPN', 'Chiba', '127550'), +('1699', 'Beppu', 'JPN', 'Oita', '127486'), +('1700', 'Niihama', 'JPN', 'Ehime', '127207'), +('1701', 'Minoo', 'JPN', 'Osaka', '127026'), +('1702', 'Fujieda', 'JPN', 'Shizuoka', '126897'), +('1703', 'Abiko', 'JPN', 'Chiba', '126670'), +('1704', 'Nobeoka', 'JPN', 'Miyazaki', '125547'), +('1705', 'Tondabayashi', 'JPN', 'Osaka', '125094'), +('1706', 'Ueda', 'JPN', 'Nagano', '124217'), +('1707', 'Kashihara', 'JPN', 'Nara', '124013'), +('1708', 'Matsusaka', 'JPN', 'Mie', '123582'), +('1709', 'Isesaki', 'JPN', 'Gumma', '123285'), +('1710', 'Zama', 'JPN', 'Kanagawa', '122046'), +('1711', 'Kisarazu', 'JPN', 'Chiba', '121967'), +('1712', 'Noda', 'JPN', 'Chiba', '121030'), +('1713', 'Ishinomaki', 'JPN', 'Miyagi', '120963'), +('1714', 'Fujinomiya', 'JPN', 'Shizuoka', '119714'), +('1715', 'Kawachinagano', 'JPN', 'Osaka', '119666'), +('1716', 'Imabari', 'JPN', 'Ehime', '119357'), +('1717', 'Aizuwakamatsu', 'JPN', 'Fukushima', '119287'), +('1718', 'Higashihiroshima', 'JPN', 'Hiroshima', '119166'), +('1719', 'Habikino', 'JPN', 'Osaka', '118968'), +('1720', 'Ebetsu', 'JPN', 'Hokkaido', '118805'), +('1721', 'Hofu', 'JPN', 'Yamaguchi', '118751'), +('1722', 'Kiryu', 'JPN', 'Gumma', '118326'), +('1723', 'Okinawa', 'JPN', 'Okinawa', '117748'), +('1724', 'Yaizu', 'JPN', 'Shizuoka', '117258'), +('1725', 'Toyokawa', 'JPN', 'Aichi', '115781'), +('1726', 'Ebina', 'JPN', 'Kanagawa', '115571'), +('1727', 'Asaka', 'JPN', 'Saitama', '114815'), +('1728', 'Higashikurume', 'JPN', 'Tokyo-to', '111666'), +('1729', 'Ikoma', 'JPN', 'Nara', '111645'), +('1730', 'Kitami', 'JPN', 'Hokkaido', '111295'), +('1731', 'Koganei', 'JPN', 'Tokyo-to', '110969'), +('1732', 'Iwatsuki', 'JPN', 'Saitama', '110034'), +('1733', 'Mishima', 'JPN', 'Shizuoka', '109699'), +('1734', 'Handa', 'JPN', 'Aichi', '108600'), +('1735', 'Muroran', 'JPN', 'Hokkaido', '108275'), +('1736', 'Komatsu', 'JPN', 'Ishikawa', '107937'), +('1737', 'Yatsushiro', 'JPN', 'Kumamoto', '107661'), +('1738', 'Iida', 'JPN', 'Nagano', '107583'), +('1739', 'Tokuyama', 'JPN', 'Yamaguchi', '107078'), +('1740', 'Kokubunji', 'JPN', 'Tokyo-to', '106996'), +('1741', 'Akishima', 'JPN', 'Tokyo-to', '106914'), +('1742', 'Iwakuni', 'JPN', 'Yamaguchi', '106647'), +('1743', 'Kusatsu', 'JPN', 'Shiga', '106232'), +('1744', 'Kuwana', 'JPN', 'Mie', '106121'), +('1745', 'Sanda', 'JPN', 'Hyogo', '105643'), +('1746', 'Hikone', 'JPN', 'Shiga', '105508'), +('1747', 'Toda', 'JPN', 'Saitama', '103969'), +('1748', 'Tajimi', 'JPN', 'Gifu', '103171'), +('1749', 'Ikeda', 'JPN', 'Osaka', '102710'), +('1750', 'Fukaya', 'JPN', 'Saitama', '102156'), +('1751', 'Ise', 'JPN', 'Mie', '101732'), +('1752', 'Sakata', 'JPN', 'Yamagata', '101651'), +('1753', 'Kasuga', 'JPN', 'Fukuoka', '101344'), +('1754', 'Kamagaya', 'JPN', 'Chiba', '100821'), +('1755', 'Tsuruoka', 'JPN', 'Yamagata', '100713'), +('1756', 'Hoya', 'JPN', 'Tokyo-to', '100313'), +('1757', 'Nishio', 'JPN', 'Chiba', '100032'), +('1758', 'Tokai', 'JPN', 'Aichi', '99738'), +('1759', 'Inazawa', 'JPN', 'Aichi', '98746'), +('1760', 'Sakado', 'JPN', 'Saitama', '98221'), +('1761', 'Isehara', 'JPN', 'Kanagawa', '98123'), +('1762', 'Takasago', 'JPN', 'Hyogo', '97632'), +('1763', 'Fujimi', 'JPN', 'Saitama', '96972'), +('1764', 'Urasoe', 'JPN', 'Okinawa', '96002'), +('1765', 'Yonezawa', 'JPN', 'Yamagata', '95592'), +('1766', 'Konan', 'JPN', 'Aichi', '95521'), +('1767', 'Yamatokoriyama', 'JPN', 'Nara', '95165'), +('1768', 'Maizuru', 'JPN', 'Kyoto', '94784'), +('1769', 'Onomichi', 'JPN', 'Hiroshima', '93756'), +('1770', 'Higashimatsuyama', 'JPN', 'Saitama', '93342'), +('1771', 'Kimitsu', 'JPN', 'Chiba', '93216'), +('1772', 'Isahaya', 'JPN', 'Nagasaki', '93058'), +('1773', 'Kanuma', 'JPN', 'Tochigi', '93053'), +('1774', 'Izumisano', 'JPN', 'Osaka', '92583'), +('1775', 'Kameoka', 'JPN', 'Kyoto', '92398'), +('1776', 'Mobara', 'JPN', 'Chiba', '91664'), +('1777', 'Narita', 'JPN', 'Chiba', '91470'), +('1778', 'Kashiwazaki', 'JPN', 'Niigata', '91229'), +('1779', 'Tsuyama', 'JPN', 'Okayama', '91170'), +('1780', 'Sanaa', 'YEM', 'Sanaa', '503600'), +('1781', 'Aden', 'YEM', 'Aden', '398300'), +('1782', 'Taizz', 'YEM', 'Taizz', '317600'), +('1783', 'Hodeida', 'YEM', 'Hodeida', '298500'), +('1784', 'al-Mukalla', 'YEM', 'Hadramawt', '122400'), +('1785', 'Ibb', 'YEM', 'Ibb', '103300'), +('1786', 'Amman', 'JOR', 'Amman', '1000000'), +('1787', 'al-Zarqa', 'JOR', 'al-Zarqa', '389815'), +('1788', 'Irbid', 'JOR', 'Irbid', '231511'), +('1789', 'al-Rusayfa', 'JOR', 'al-Zarqa', '137247'), +('1790', 'Wadi al-Sir', 'JOR', 'Amman', '89104'), +('1791', 'Flying Fish Cove', 'CXR', '–', '700'), +('1792', 'Beograd', 'YUG', 'Central Serbia', '1204000'), +('1793', 'Novi Sad', 'YUG', 'Vojvodina', '179626'), +('1794', 'Niš', 'YUG', 'Central Serbia', '175391'), +('1795', 'Priština', 'YUG', 'Kosovo and Metohija', '155496'), +('1796', 'Kragujevac', 'YUG', 'Central Serbia', '147305'), +('1797', 'Podgorica', 'YUG', 'Montenegro', '135000'), +('1798', 'Subotica', 'YUG', 'Vojvodina', '100386'), +('1799', 'Prizren', 'YUG', 'Kosovo and Metohija', '92303'), +('1800', 'Phnom Penh', 'KHM', 'Phnom Penh', '570155'), +('1801', 'Battambang', 'KHM', 'Battambang', '129800'), +('1802', 'Siem Reap', 'KHM', 'Siem Reap', '105100'), +('1803', 'Douala', 'CMR', 'Littoral', '1448300'), +('1804', 'Yaoundé', 'CMR', 'Centre', '1372800'), +('1805', 'Garoua', 'CMR', 'Nord', '177000'), +('1806', 'Maroua', 'CMR', 'Extręme-Nord', '143000'), +('1807', 'Bamenda', 'CMR', 'Nord-Ouest', '138000'), +('1808', 'Bafoussam', 'CMR', 'Ouest', '131000'), +('1809', 'Nkongsamba', 'CMR', 'Littoral', '112454'), +('1810', 'Montréal', 'CAN', 'Québec', '1016376'), +('1811', 'Calgary', 'CAN', 'Alberta', '768082'), +('1812', 'Toronto', 'CAN', 'Ontario', '688275'), +('1813', 'North York', 'CAN', 'Ontario', '622632'), +('1814', 'Winnipeg', 'CAN', 'Manitoba', '618477'), +('1815', 'Edmonton', 'CAN', 'Alberta', '616306'), +('1816', 'Mississauga', 'CAN', 'Ontario', '608072'), +('1817', 'Scarborough', 'CAN', 'Ontario', '594501'), +('1818', 'Vancouver', 'CAN', 'British Colombia', '514008'), +('1819', 'Etobicoke', 'CAN', 'Ontario', '348845'), +('1820', 'London', 'CAN', 'Ontario', '339917'), +('1821', 'Hamilton', 'CAN', 'Ontario', '335614'), +('1822', 'Ottawa', 'CAN', 'Ontario', '335277'), +('1823', 'Laval', 'CAN', 'Québec', '330393'), +('1824', 'Surrey', 'CAN', 'British Colombia', '304477'), +('1825', 'Brampton', 'CAN', 'Ontario', '296711'), +('1826', 'Windsor', 'CAN', 'Ontario', '207588'), +('1827', 'Saskatoon', 'CAN', 'Saskatchewan', '193647'), +('1828', 'Kitchener', 'CAN', 'Ontario', '189959'), +('1829', 'Markham', 'CAN', 'Ontario', '189098'), +('1830', 'Regina', 'CAN', 'Saskatchewan', '180400'), +('1831', 'Burnaby', 'CAN', 'British Colombia', '179209'), +('1832', 'Québec', 'CAN', 'Québec', '167264'), +('1833', 'York', 'CAN', 'Ontario', '154980'), +('1834', 'Richmond', 'CAN', 'British Colombia', '148867'), +('1835', 'Vaughan', 'CAN', 'Ontario', '147889'), +('1836', 'Burlington', 'CAN', 'Ontario', '145150'), +('1837', 'Oshawa', 'CAN', 'Ontario', '140173'), +('1838', 'Oakville', 'CAN', 'Ontario', '139192'), +('1839', 'Saint Catharines', 'CAN', 'Ontario', '136216'), +('1840', 'Longueuil', 'CAN', 'Québec', '127977'), +('1841', 'Richmond Hill', 'CAN', 'Ontario', '116428'), +('1842', 'Thunder Bay', 'CAN', 'Ontario', '115913'), +('1843', 'Nepean', 'CAN', 'Ontario', '115100'), +('1844', 'Cape Breton', 'CAN', 'Nova Scotia', '114733'), +('1845', 'East York', 'CAN', 'Ontario', '114034'), +('1846', 'Halifax', 'CAN', 'Nova Scotia', '113910'), +('1847', 'Cambridge', 'CAN', 'Ontario', '109186'), +('1848', 'Gloucester', 'CAN', 'Ontario', '107314'), +('1849', 'Abbotsford', 'CAN', 'British Colombia', '105403'), +('1850', 'Guelph', 'CAN', 'Ontario', '103593'), +('1851', 'Saint John´s', 'CAN', 'Newfoundland', '101936'), +('1852', 'Coquitlam', 'CAN', 'British Colombia', '101820'), +('1853', 'Saanich', 'CAN', 'British Colombia', '101388'), +('1854', 'Gatineau', 'CAN', 'Québec', '100702'), +('1855', 'Delta', 'CAN', 'British Colombia', '95411'), +('1856', 'Sudbury', 'CAN', 'Ontario', '92686'), +('1857', 'Kelowna', 'CAN', 'British Colombia', '89442'), +('1858', 'Barrie', 'CAN', 'Ontario', '89269'), +('1859', 'Praia', 'CPV', 'Săo Tiago', '94800'), +('1860', 'Almaty', 'KAZ', 'Almaty Qalasy', '1129400'), +('1861', 'Qaraghandy', 'KAZ', 'Qaraghandy', '436900'), +('1862', 'Shymkent', 'KAZ', 'South Kazakstan', '360100'), +('1863', 'Taraz', 'KAZ', 'Taraz', '330100'), +('1864', 'Astana', 'KAZ', 'Astana', '311200'), +('1865', 'Öskemen', 'KAZ', 'East Kazakstan', '311000'), +('1866', 'Pavlodar', 'KAZ', 'Pavlodar', '300500'), +('1867', 'Semey', 'KAZ', 'East Kazakstan', '269600'), +('1868', 'Aqtöbe', 'KAZ', 'Aqtöbe', '253100'), +('1869', 'Qostanay', 'KAZ', 'Qostanay', '221400'), +('1870', 'Petropavl', 'KAZ', 'North Kazakstan', '203500'), +('1871', 'Oral', 'KAZ', 'West Kazakstan', '195500'), +('1872', 'Temirtau', 'KAZ', 'Qaraghandy', '170500'), +('1873', 'Qyzylorda', 'KAZ', 'Qyzylorda', '157400'), +('1874', 'Aqtau', 'KAZ', 'Mangghystau', '143400'), +('1875', 'Atyrau', 'KAZ', 'Atyrau', '142500'), +('1876', 'Ekibastuz', 'KAZ', 'Pavlodar', '127200'), +('1877', 'Kökshetau', 'KAZ', 'North Kazakstan', '123400'), +('1878', 'Rudnyy', 'KAZ', 'Qostanay', '109500'), +('1879', 'Taldyqorghan', 'KAZ', 'Almaty', '98000'), +('1880', 'Zhezqazghan', 'KAZ', 'Qaraghandy', '90000'), +('1881', 'Nairobi', 'KEN', 'Nairobi', '2290000'), +('1882', 'Mombasa', 'KEN', 'Coast', '461753'), +('1883', 'Kisumu', 'KEN', 'Nyanza', '192733'), +('1884', 'Nakuru', 'KEN', 'Rift Valley', '163927'), +('1885', 'Machakos', 'KEN', 'Eastern', '116293'), +('1886', 'Eldoret', 'KEN', 'Rift Valley', '111882'), +('1887', 'Meru', 'KEN', 'Eastern', '94947'), +('1888', 'Nyeri', 'KEN', 'Central', '91258'), +('1889', 'Bangui', 'CAF', 'Bangui', '524000'), +('1890', 'Shanghai', 'CHN', 'Shanghai', '9696300'), +('1891', 'Peking', 'CHN', 'Peking', '7472000'), +('1892', 'Chongqing', 'CHN', 'Chongqing', '6351600'), +('1893', 'Tianjin', 'CHN', 'Tianjin', '5286800'), +('1894', 'Wuhan', 'CHN', 'Hubei', '4344600'), +('1895', 'Harbin', 'CHN', 'Heilongjiang', '4289800'), +('1896', 'Shenyang', 'CHN', 'Liaoning', '4265200'), +('1897', 'Kanton [Guangzhou]', 'CHN', 'Guangdong', '4256300'), +('1898', 'Chengdu', 'CHN', 'Sichuan', '3361500'), +('1899', 'Nanking [Nanjing]', 'CHN', 'Jiangsu', '2870300'), +('1900', 'Changchun', 'CHN', 'Jilin', '2812000'), +('1901', 'Xi´an', 'CHN', 'Shaanxi', '2761400'), +('1902', 'Dalian', 'CHN', 'Liaoning', '2697000'), +('1903', 'Qingdao', 'CHN', 'Shandong', '2596000'), +('1904', 'Jinan', 'CHN', 'Shandong', '2278100'), +('1905', 'Hangzhou', 'CHN', 'Zhejiang', '2190500'), +('1906', 'Zhengzhou', 'CHN', 'Henan', '2107200'), +('1907', 'Shijiazhuang', 'CHN', 'Hebei', '2041500'), +('1908', 'Taiyuan', 'CHN', 'Shanxi', '1968400'), +('1909', 'Kunming', 'CHN', 'Yunnan', '1829500'), +('1910', 'Changsha', 'CHN', 'Hunan', '1809800'), +('1911', 'Nanchang', 'CHN', 'Jiangxi', '1691600'), +('1912', 'Fuzhou', 'CHN', 'Fujian', '1593800'), +('1913', 'Lanzhou', 'CHN', 'Gansu', '1565800'), +('1914', 'Guiyang', 'CHN', 'Guizhou', '1465200'), +('1915', 'Ningbo', 'CHN', 'Zhejiang', '1371200'), +('1916', 'Hefei', 'CHN', 'Anhui', '1369100'), +('1917', 'Urumtši [Ürümqi]', 'CHN', 'Xinxiang', '1310100'), +('1918', 'Anshan', 'CHN', 'Liaoning', '1200000'), +('1919', 'Fushun', 'CHN', 'Liaoning', '1200000'), +('1920', 'Nanning', 'CHN', 'Guangxi', '1161800'), +('1921', 'Zibo', 'CHN', 'Shandong', '1140000'), +('1922', 'Qiqihar', 'CHN', 'Heilongjiang', '1070000'), +('1923', 'Jilin', 'CHN', 'Jilin', '1040000'), +('1924', 'Tangshan', 'CHN', 'Hebei', '1040000'), +('1925', 'Baotou', 'CHN', 'Inner Mongolia', '980000'), +('1926', 'Shenzhen', 'CHN', 'Guangdong', '950500'), +('1927', 'Hohhot', 'CHN', 'Inner Mongolia', '916700'), +('1928', 'Handan', 'CHN', 'Hebei', '840000'), +('1929', 'Wuxi', 'CHN', 'Jiangsu', '830000'), +('1930', 'Xuzhou', 'CHN', 'Jiangsu', '810000'), +('1931', 'Datong', 'CHN', 'Shanxi', '800000'), +('1932', 'Yichun', 'CHN', 'Heilongjiang', '800000'), +('1933', 'Benxi', 'CHN', 'Liaoning', '770000'), +('1934', 'Luoyang', 'CHN', 'Henan', '760000'), +('1935', 'Suzhou', 'CHN', 'Jiangsu', '710000'), +('1936', 'Xining', 'CHN', 'Qinghai', '700200'), +('1937', 'Huainan', 'CHN', 'Anhui', '700000'), +('1938', 'Jixi', 'CHN', 'Heilongjiang', '683885'), +('1939', 'Daqing', 'CHN', 'Heilongjiang', '660000'), +('1940', 'Fuxin', 'CHN', 'Liaoning', '640000'), +('1941', 'Amoy [Xiamen]', 'CHN', 'Fujian', '627500'), +('1942', 'Liuzhou', 'CHN', 'Guangxi', '610000'), +('1943', 'Shantou', 'CHN', 'Guangdong', '580000'), +('1944', 'Jinzhou', 'CHN', 'Liaoning', '570000'), +('1945', 'Mudanjiang', 'CHN', 'Heilongjiang', '570000'), +('1946', 'Yinchuan', 'CHN', 'Ningxia', '544500'), +('1947', 'Changzhou', 'CHN', 'Jiangsu', '530000'), +('1948', 'Zhangjiakou', 'CHN', 'Hebei', '530000'), +('1949', 'Dandong', 'CHN', 'Liaoning', '520000'), +('1950', 'Hegang', 'CHN', 'Heilongjiang', '520000'), +('1951', 'Kaifeng', 'CHN', 'Henan', '510000'), +('1952', 'Jiamusi', 'CHN', 'Heilongjiang', '493409'), +('1953', 'Liaoyang', 'CHN', 'Liaoning', '492559'), +('1954', 'Hengyang', 'CHN', 'Hunan', '487148'), +('1955', 'Baoding', 'CHN', 'Hebei', '483155'), +('1956', 'Hunjiang', 'CHN', 'Jilin', '482043'), +('1957', 'Xinxiang', 'CHN', 'Henan', '473762'), +('1958', 'Huangshi', 'CHN', 'Hubei', '457601'), +('1959', 'Haikou', 'CHN', 'Hainan', '454300'), +('1960', 'Yantai', 'CHN', 'Shandong', '452127'), +('1961', 'Bengbu', 'CHN', 'Anhui', '449245'), +('1962', 'Xiangtan', 'CHN', 'Hunan', '441968'), +('1963', 'Weifang', 'CHN', 'Shandong', '428522'), +('1964', 'Wuhu', 'CHN', 'Anhui', '425740'), +('1965', 'Pingxiang', 'CHN', 'Jiangxi', '425579'), +('1966', 'Yingkou', 'CHN', 'Liaoning', '421589'), +('1967', 'Anyang', 'CHN', 'Henan', '420332'), +('1968', 'Panzhihua', 'CHN', 'Sichuan', '415466'), +('1969', 'Pingdingshan', 'CHN', 'Henan', '410775'), +('1970', 'Xiangfan', 'CHN', 'Hubei', '410407'), +('1971', 'Zhuzhou', 'CHN', 'Hunan', '409924'), +('1972', 'Jiaozuo', 'CHN', 'Henan', '409100'), +('1973', 'Wenzhou', 'CHN', 'Zhejiang', '401871'), +('1974', 'Zhangjiang', 'CHN', 'Guangdong', '400997'), +('1975', 'Zigong', 'CHN', 'Sichuan', '393184'), +('1976', 'Shuangyashan', 'CHN', 'Heilongjiang', '386081'), +('1977', 'Zaozhuang', 'CHN', 'Shandong', '380846'), +('1978', 'Yakeshi', 'CHN', 'Inner Mongolia', '377869'), +('1979', 'Yichang', 'CHN', 'Hubei', '371601'), +('1980', 'Zhenjiang', 'CHN', 'Jiangsu', '368316'), +('1981', 'Huaibei', 'CHN', 'Anhui', '366549'), +('1982', 'Qinhuangdao', 'CHN', 'Hebei', '364972'), +('1983', 'Guilin', 'CHN', 'Guangxi', '364130'), +('1984', 'Liupanshui', 'CHN', 'Guizhou', '363954'), +('1985', 'Panjin', 'CHN', 'Liaoning', '362773'), +('1986', 'Yangquan', 'CHN', 'Shanxi', '362268'), +('1987', 'Jinxi', 'CHN', 'Liaoning', '357052'), +('1988', 'Liaoyuan', 'CHN', 'Jilin', '354141'), +('1989', 'Lianyungang', 'CHN', 'Jiangsu', '354139'), +('1990', 'Xianyang', 'CHN', 'Shaanxi', '352125'), +('1991', 'Tai´an', 'CHN', 'Shandong', '350696'), +('1992', 'Chifeng', 'CHN', 'Inner Mongolia', '350077'), +('1993', 'Shaoguan', 'CHN', 'Guangdong', '350043'), +('1994', 'Nantong', 'CHN', 'Jiangsu', '343341'), +('1995', 'Leshan', 'CHN', 'Sichuan', '341128'), +('1996', 'Baoji', 'CHN', 'Shaanxi', '337765'), +('1997', 'Linyi', 'CHN', 'Shandong', '324720'), +('1998', 'Tonghua', 'CHN', 'Jilin', '324600'), +('1999', 'Siping', 'CHN', 'Jilin', '317223'); + +INSERT INTO city (id, name, countrycode, district, population) VALUES +('2000', 'Changzhi', 'CHN', 'Shanxi', '317144'), +('2001', 'Tengzhou', 'CHN', 'Shandong', '315083'), +('2002', 'Chaozhou', 'CHN', 'Guangdong', '313469'), +('2003', 'Yangzhou', 'CHN', 'Jiangsu', '312892'), +('2004', 'Dongwan', 'CHN', 'Guangdong', '308669'), +('2005', 'Ma´anshan', 'CHN', 'Anhui', '305421'), +('2006', 'Foshan', 'CHN', 'Guangdong', '303160'), +('2007', 'Yueyang', 'CHN', 'Hunan', '302800'), +('2008', 'Xingtai', 'CHN', 'Hebei', '302789'), +('2009', 'Changde', 'CHN', 'Hunan', '301276'), +('2010', 'Shihezi', 'CHN', 'Xinxiang', '299676'), +('2011', 'Yancheng', 'CHN', 'Jiangsu', '296831'), +('2012', 'Jiujiang', 'CHN', 'Jiangxi', '291187'), +('2013', 'Dongying', 'CHN', 'Shandong', '281728'), +('2014', 'Shashi', 'CHN', 'Hubei', '281352'), +('2015', 'Xintai', 'CHN', 'Shandong', '281248'), +('2016', 'Jingdezhen', 'CHN', 'Jiangxi', '281183'), +('2017', 'Tongchuan', 'CHN', 'Shaanxi', '280657'), +('2018', 'Zhongshan', 'CHN', 'Guangdong', '278829'), +('2019', 'Shiyan', 'CHN', 'Hubei', '273786'), +('2020', 'Tieli', 'CHN', 'Heilongjiang', '265683'), +('2021', 'Jining', 'CHN', 'Shandong', '265248'), +('2022', 'Wuhai', 'CHN', 'Inner Mongolia', '264081'), +('2023', 'Mianyang', 'CHN', 'Sichuan', '262947'), +('2024', 'Luzhou', 'CHN', 'Sichuan', '262892'), +('2025', 'Zunyi', 'CHN', 'Guizhou', '261862'), +('2026', 'Shizuishan', 'CHN', 'Ningxia', '257862'), +('2027', 'Neijiang', 'CHN', 'Sichuan', '256012'), +('2028', 'Tongliao', 'CHN', 'Inner Mongolia', '255129'), +('2029', 'Tieling', 'CHN', 'Liaoning', '254842'), +('2030', 'Wafangdian', 'CHN', 'Liaoning', '251733'), +('2031', 'Anqing', 'CHN', 'Anhui', '250718'), +('2032', 'Shaoyang', 'CHN', 'Hunan', '247227'), +('2033', 'Laiwu', 'CHN', 'Shandong', '246833'), +('2034', 'Chengde', 'CHN', 'Hebei', '246799'), +('2035', 'Tianshui', 'CHN', 'Gansu', '244974'), +('2036', 'Nanyang', 'CHN', 'Henan', '243303'), +('2037', 'Cangzhou', 'CHN', 'Hebei', '242708'), +('2038', 'Yibin', 'CHN', 'Sichuan', '241019'), +('2039', 'Huaiyin', 'CHN', 'Jiangsu', '239675'), +('2040', 'Dunhua', 'CHN', 'Jilin', '235100'), +('2041', 'Yanji', 'CHN', 'Jilin', '230892'), +('2042', 'Jiangmen', 'CHN', 'Guangdong', '230587'), +('2043', 'Tongling', 'CHN', 'Anhui', '228017'), +('2044', 'Suihua', 'CHN', 'Heilongjiang', '227881'), +('2045', 'Gongziling', 'CHN', 'Jilin', '226569'), +('2046', 'Xiantao', 'CHN', 'Hubei', '222884'), +('2047', 'Chaoyang', 'CHN', 'Liaoning', '222394'), +('2048', 'Ganzhou', 'CHN', 'Jiangxi', '220129'), +('2049', 'Huzhou', 'CHN', 'Zhejiang', '218071'), +('2050', 'Baicheng', 'CHN', 'Jilin', '217987'), +('2051', 'Shangzi', 'CHN', 'Heilongjiang', '215373'), +('2052', 'Yangjiang', 'CHN', 'Guangdong', '215196'), +('2053', 'Qitaihe', 'CHN', 'Heilongjiang', '214957'), +('2054', 'Gejiu', 'CHN', 'Yunnan', '214294'), +('2055', 'Jiangyin', 'CHN', 'Jiangsu', '213659'), +('2056', 'Hebi', 'CHN', 'Henan', '212976'), +('2057', 'Jiaxing', 'CHN', 'Zhejiang', '211526'), +('2058', 'Wuzhou', 'CHN', 'Guangxi', '210452'), +('2059', 'Meihekou', 'CHN', 'Jilin', '209038'), +('2060', 'Xuchang', 'CHN', 'Henan', '208815'), +('2061', 'Liaocheng', 'CHN', 'Shandong', '207844'), +('2062', 'Haicheng', 'CHN', 'Liaoning', '205560'), +('2063', 'Qianjiang', 'CHN', 'Hubei', '205504'), +('2064', 'Baiyin', 'CHN', 'Gansu', '204970'), +('2065', 'Bei´an', 'CHN', 'Heilongjiang', '204899'), +('2066', 'Yixing', 'CHN', 'Jiangsu', '200824'), +('2067', 'Laizhou', 'CHN', 'Shandong', '198664'), +('2068', 'Qaramay', 'CHN', 'Xinxiang', '197602'), +('2069', 'Acheng', 'CHN', 'Heilongjiang', '197595'), +('2070', 'Dezhou', 'CHN', 'Shandong', '195485'), +('2071', 'Nanping', 'CHN', 'Fujian', '195064'), +('2072', 'Zhaoqing', 'CHN', 'Guangdong', '194784'), +('2073', 'Beipiao', 'CHN', 'Liaoning', '194301'), +('2074', 'Fengcheng', 'CHN', 'Jiangxi', '193784'), +('2075', 'Fuyu', 'CHN', 'Jilin', '192981'), +('2076', 'Xinyang', 'CHN', 'Henan', '192509'), +('2077', 'Dongtai', 'CHN', 'Jiangsu', '192247'), +('2078', 'Yuci', 'CHN', 'Shanxi', '191356'), +('2079', 'Honghu', 'CHN', 'Hubei', '190772'), +('2080', 'Ezhou', 'CHN', 'Hubei', '190123'), +('2081', 'Heze', 'CHN', 'Shandong', '189293'), +('2082', 'Daxian', 'CHN', 'Sichuan', '188101'), +('2083', 'Linfen', 'CHN', 'Shanxi', '187309'), +('2084', 'Tianmen', 'CHN', 'Hubei', '186332'), +('2085', 'Yiyang', 'CHN', 'Hunan', '185818'), +('2086', 'Quanzhou', 'CHN', 'Fujian', '185154'), +('2087', 'Rizhao', 'CHN', 'Shandong', '185048'), +('2088', 'Deyang', 'CHN', 'Sichuan', '182488'), +('2089', 'Guangyuan', 'CHN', 'Sichuan', '182241'), +('2090', 'Changshu', 'CHN', 'Jiangsu', '181805'), +('2091', 'Zhangzhou', 'CHN', 'Fujian', '181424'), +('2092', 'Hailar', 'CHN', 'Inner Mongolia', '180650'), +('2093', 'Nanchong', 'CHN', 'Sichuan', '180273'), +('2094', 'Jiutai', 'CHN', 'Jilin', '180130'), +('2095', 'Zhaodong', 'CHN', 'Heilongjiang', '179976'), +('2096', 'Shaoxing', 'CHN', 'Zhejiang', '179818'), +('2097', 'Fuyang', 'CHN', 'Anhui', '179572'), +('2098', 'Maoming', 'CHN', 'Guangdong', '178683'), +('2099', 'Qujing', 'CHN', 'Yunnan', '178669'), +('2100', 'Ghulja', 'CHN', 'Xinxiang', '177193'), +('2101', 'Jiaohe', 'CHN', 'Jilin', '176367'), +('2102', 'Puyang', 'CHN', 'Henan', '175988'), +('2103', 'Huadian', 'CHN', 'Jilin', '175873'), +('2104', 'Jiangyou', 'CHN', 'Sichuan', '175753'), +('2105', 'Qashqar', 'CHN', 'Xinxiang', '174570'), +('2106', 'Anshun', 'CHN', 'Guizhou', '174142'), +('2107', 'Fuling', 'CHN', 'Sichuan', '173878'), +('2108', 'Xinyu', 'CHN', 'Jiangxi', '173524'), +('2109', 'Hanzhong', 'CHN', 'Shaanxi', '169930'), +('2110', 'Danyang', 'CHN', 'Jiangsu', '169603'), +('2111', 'Chenzhou', 'CHN', 'Hunan', '169400'), +('2112', 'Xiaogan', 'CHN', 'Hubei', '166280'), +('2113', 'Shangqiu', 'CHN', 'Henan', '164880'), +('2114', 'Zhuhai', 'CHN', 'Guangdong', '164747'), +('2115', 'Qingyuan', 'CHN', 'Guangdong', '164641'), +('2116', 'Aqsu', 'CHN', 'Xinxiang', '164092'), +('2117', 'Jining', 'CHN', 'Inner Mongolia', '163552'), +('2118', 'Xiaoshan', 'CHN', 'Zhejiang', '162930'), +('2119', 'Zaoyang', 'CHN', 'Hubei', '162198'), +('2120', 'Xinghua', 'CHN', 'Jiangsu', '161910'), +('2121', 'Hami', 'CHN', 'Xinxiang', '161315'), +('2122', 'Huizhou', 'CHN', 'Guangdong', '161023'), +('2123', 'Jinmen', 'CHN', 'Hubei', '160794'), +('2124', 'Sanming', 'CHN', 'Fujian', '160691'), +('2125', 'Ulanhot', 'CHN', 'Inner Mongolia', '159538'), +('2126', 'Korla', 'CHN', 'Xinxiang', '159344'), +('2127', 'Wanxian', 'CHN', 'Sichuan', '156823'), +('2128', 'Rui´an', 'CHN', 'Zhejiang', '156468'), +('2129', 'Zhoushan', 'CHN', 'Zhejiang', '156317'), +('2130', 'Liangcheng', 'CHN', 'Shandong', '156307'), +('2131', 'Jiaozhou', 'CHN', 'Shandong', '153364'), +('2132', 'Taizhou', 'CHN', 'Jiangsu', '152442'), +('2133', 'Suzhou', 'CHN', 'Anhui', '151862'), +('2134', 'Yichun', 'CHN', 'Jiangxi', '151585'), +('2135', 'Taonan', 'CHN', 'Jilin', '150168'), +('2136', 'Pingdu', 'CHN', 'Shandong', '150123'), +('2137', 'Ji´an', 'CHN', 'Jiangxi', '148583'), +('2138', 'Longkou', 'CHN', 'Shandong', '148362'), +('2139', 'Langfang', 'CHN', 'Hebei', '148105'), +('2140', 'Zhoukou', 'CHN', 'Henan', '146288'), +('2141', 'Suining', 'CHN', 'Sichuan', '146086'), +('2142', 'Yulin', 'CHN', 'Guangxi', '144467'), +('2143', 'Jinhua', 'CHN', 'Zhejiang', '144280'), +('2144', 'Liu´an', 'CHN', 'Anhui', '144248'), +('2145', 'Shuangcheng', 'CHN', 'Heilongjiang', '142659'), +('2146', 'Suizhou', 'CHN', 'Hubei', '142302'), +('2147', 'Ankang', 'CHN', 'Shaanxi', '142170'), +('2148', 'Weinan', 'CHN', 'Shaanxi', '140169'), +('2149', 'Longjing', 'CHN', 'Jilin', '139417'), +('2150', 'Da´an', 'CHN', 'Jilin', '138963'), +('2151', 'Lengshuijiang', 'CHN', 'Hunan', '137994'), +('2152', 'Laiyang', 'CHN', 'Shandong', '137080'), +('2153', 'Xianning', 'CHN', 'Hubei', '136811'), +('2154', 'Dali', 'CHN', 'Yunnan', '136554'), +('2155', 'Anda', 'CHN', 'Heilongjiang', '136446'), +('2156', 'Jincheng', 'CHN', 'Shanxi', '136396'), +('2157', 'Longyan', 'CHN', 'Fujian', '134481'), +('2158', 'Xichang', 'CHN', 'Sichuan', '134419'), +('2159', 'Wendeng', 'CHN', 'Shandong', '133910'), +('2160', 'Hailun', 'CHN', 'Heilongjiang', '133565'), +('2161', 'Binzhou', 'CHN', 'Shandong', '133555'), +('2162', 'Linhe', 'CHN', 'Inner Mongolia', '133183'), +('2163', 'Wuwei', 'CHN', 'Gansu', '133101'), +('2164', 'Duyun', 'CHN', 'Guizhou', '132971'), +('2165', 'Mishan', 'CHN', 'Heilongjiang', '132744'), +('2166', 'Shangrao', 'CHN', 'Jiangxi', '132455'), +('2167', 'Changji', 'CHN', 'Xinxiang', '132260'), +('2168', 'Meixian', 'CHN', 'Guangdong', '132156'), +('2169', 'Yushu', 'CHN', 'Jilin', '131861'), +('2170', 'Tiefa', 'CHN', 'Liaoning', '131807'), +('2171', 'Huai´an', 'CHN', 'Jiangsu', '131149'), +('2172', 'Leiyang', 'CHN', 'Hunan', '130115'), +('2173', 'Zalantun', 'CHN', 'Inner Mongolia', '130031'), +('2174', 'Weihai', 'CHN', 'Shandong', '128888'), +('2175', 'Loudi', 'CHN', 'Hunan', '128418'), +('2176', 'Qingzhou', 'CHN', 'Shandong', '128258'), +('2177', 'Qidong', 'CHN', 'Jiangsu', '126872'), +('2178', 'Huaihua', 'CHN', 'Hunan', '126785'), +('2179', 'Luohe', 'CHN', 'Henan', '126438'), +('2180', 'Chuzhou', 'CHN', 'Anhui', '125341'), +('2181', 'Kaiyuan', 'CHN', 'Liaoning', '124219'), +('2182', 'Linqing', 'CHN', 'Shandong', '123958'), +('2183', 'Chaohu', 'CHN', 'Anhui', '123676'), +('2184', 'Laohekou', 'CHN', 'Hubei', '123366'), +('2185', 'Dujiangyan', 'CHN', 'Sichuan', '123357'), +('2186', 'Zhumadian', 'CHN', 'Henan', '123232'), +('2187', 'Linchuan', 'CHN', 'Jiangxi', '121949'), +('2188', 'Jiaonan', 'CHN', 'Shandong', '121397'), +('2189', 'Sanmenxia', 'CHN', 'Henan', '120523'), +('2190', 'Heyuan', 'CHN', 'Guangdong', '120101'), +('2191', 'Manzhouli', 'CHN', 'Inner Mongolia', '120023'), +('2192', 'Lhasa', 'CHN', 'Tibet', '120000'), +('2193', 'Lianyuan', 'CHN', 'Hunan', '118858'), +('2194', 'Kuytun', 'CHN', 'Xinxiang', '118553'), +('2195', 'Puqi', 'CHN', 'Hubei', '117264'), +('2196', 'Hongjiang', 'CHN', 'Hunan', '116188'), +('2197', 'Qinzhou', 'CHN', 'Guangxi', '114586'), +('2198', 'Renqiu', 'CHN', 'Hebei', '114256'), +('2199', 'Yuyao', 'CHN', 'Zhejiang', '114065'), +('2200', 'Guigang', 'CHN', 'Guangxi', '114025'), +('2201', 'Kaili', 'CHN', 'Guizhou', '113958'), +('2202', 'Yan´an', 'CHN', 'Shaanxi', '113277'), +('2203', 'Beihai', 'CHN', 'Guangxi', '112673'), +('2204', 'Xuangzhou', 'CHN', 'Anhui', '112673'), +('2205', 'Quzhou', 'CHN', 'Zhejiang', '112373'), +('2206', 'Yong´an', 'CHN', 'Fujian', '111762'), +('2207', 'Zixing', 'CHN', 'Hunan', '110048'), +('2208', 'Liyang', 'CHN', 'Jiangsu', '109520'), +('2209', 'Yizheng', 'CHN', 'Jiangsu', '109268'), +('2210', 'Yumen', 'CHN', 'Gansu', '109234'), +('2211', 'Liling', 'CHN', 'Hunan', '108504'), +('2212', 'Yuncheng', 'CHN', 'Shanxi', '108359'), +('2213', 'Shanwei', 'CHN', 'Guangdong', '107847'), +('2214', 'Cixi', 'CHN', 'Zhejiang', '107329'), +('2215', 'Yuanjiang', 'CHN', 'Hunan', '107004'), +('2216', 'Bozhou', 'CHN', 'Anhui', '106346'), +('2217', 'Jinchang', 'CHN', 'Gansu', '105287'), +('2218', 'Fu´an', 'CHN', 'Fujian', '105265'), +('2219', 'Suqian', 'CHN', 'Jiangsu', '105021'), +('2220', 'Shishou', 'CHN', 'Hubei', '104571'), +('2221', 'Hengshui', 'CHN', 'Hebei', '104269'), +('2222', 'Danjiangkou', 'CHN', 'Hubei', '103211'), +('2223', 'Fujin', 'CHN', 'Heilongjiang', '103104'), +('2224', 'Sanya', 'CHN', 'Hainan', '102820'), +('2225', 'Guangshui', 'CHN', 'Hubei', '102770'), +('2226', 'Huangshan', 'CHN', 'Anhui', '102628'), +('2227', 'Xingcheng', 'CHN', 'Liaoning', '102384'), +('2228', 'Zhucheng', 'CHN', 'Shandong', '102134'), +('2229', 'Kunshan', 'CHN', 'Jiangsu', '102052'), +('2230', 'Haining', 'CHN', 'Zhejiang', '100478'), +('2231', 'Pingliang', 'CHN', 'Gansu', '99265'), +('2232', 'Fuqing', 'CHN', 'Fujian', '99193'), +('2233', 'Xinzhou', 'CHN', 'Shanxi', '98667'), +('2234', 'Jieyang', 'CHN', 'Guangdong', '98531'), +('2235', 'Zhangjiagang', 'CHN', 'Jiangsu', '97994'), +('2236', 'Tong Xian', 'CHN', 'Peking', '97168'), +('2237', 'Ya´an', 'CHN', 'Sichuan', '95900'), +('2238', 'Jinzhou', 'CHN', 'Liaoning', '95761'), +('2239', 'Emeishan', 'CHN', 'Sichuan', '94000'), +('2240', 'Enshi', 'CHN', 'Hubei', '93056'), +('2241', 'Bose', 'CHN', 'Guangxi', '93009'), +('2242', 'Yuzhou', 'CHN', 'Henan', '92889'), +('2243', 'Kaiyuan', 'CHN', 'Yunnan', '91999'), +('2244', 'Tumen', 'CHN', 'Jilin', '91471'), +('2245', 'Putian', 'CHN', 'Fujian', '91030'), +('2246', 'Linhai', 'CHN', 'Zhejiang', '90870'), +('2247', 'Xilin Hot', 'CHN', 'Inner Mongolia', '90646'), +('2248', 'Shaowu', 'CHN', 'Fujian', '90286'), +('2249', 'Junan', 'CHN', 'Shandong', '90222'), +('2250', 'Huaying', 'CHN', 'Sichuan', '89400'), +('2251', 'Pingyi', 'CHN', 'Shandong', '89373'), +('2252', 'Huangyan', 'CHN', 'Zhejiang', '89288'), +('2253', 'Bishkek', 'KGZ', 'Bishkek shaary', '589400'), +('2254', 'Osh', 'KGZ', 'Osh', '222700'), +('2255', 'Bikenibeu', 'KIR', 'South Tarawa', '5055'), +('2256', 'Bairiki', 'KIR', 'South Tarawa', '2226'), +('2257', 'Santafé de Bogotá', 'COL', 'Santafé de Bogotá', '6260862'), +('2258', 'Cali', 'COL', 'Valle', '2077386'), +('2259', 'Medellín', 'COL', 'Antioquia', '1861265'), +('2260', 'Barranquilla', 'COL', 'Atlántico', '1223260'), +('2261', 'Cartagena', 'COL', 'Bolívar', '805757'), +('2262', 'Cúcuta', 'COL', 'Norte de Santander', '606932'), +('2263', 'Bucaramanga', 'COL', 'Santander', '515555'), +('2264', 'Ibagué', 'COL', 'Tolima', '393664'), +('2265', 'Pereira', 'COL', 'Risaralda', '381725'), +('2266', 'Santa Marta', 'COL', 'Magdalena', '359147'), +('2267', 'Manizales', 'COL', 'Caldas', '337580'), +('2268', 'Bello', 'COL', 'Antioquia', '333470'), +('2269', 'Pasto', 'COL', 'Narińo', '332396'), +('2270', 'Neiva', 'COL', 'Huila', '300052'), +('2271', 'Soledad', 'COL', 'Atlántico', '295058'), +('2272', 'Armenia', 'COL', 'Quindío', '288977'), +('2273', 'Villavicencio', 'COL', 'Meta', '273140'), +('2274', 'Soacha', 'COL', 'Cundinamarca', '272058'), +('2275', 'Valledupar', 'COL', 'Cesar', '263247'), +('2276', 'Montería', 'COL', 'Córdoba', '248245'), +('2277', 'Itagüí', 'COL', 'Antioquia', '228985'), +('2278', 'Palmira', 'COL', 'Valle', '226509'), +('2279', 'Buenaventura', 'COL', 'Valle', '224336'), +('2280', 'Floridablanca', 'COL', 'Santander', '221913'), +('2281', 'Sincelejo', 'COL', 'Sucre', '220704'), +('2282', 'Popayán', 'COL', 'Cauca', '200719'), +('2283', 'Barrancabermeja', 'COL', 'Santander', '178020'), +('2284', 'Dos Quebradas', 'COL', 'Risaralda', '159363'), +('2285', 'Tuluá', 'COL', 'Valle', '152488'), +('2286', 'Envigado', 'COL', 'Antioquia', '135848'), +('2287', 'Cartago', 'COL', 'Valle', '125884'), +('2288', 'Girardot', 'COL', 'Cundinamarca', '110963'), +('2289', 'Buga', 'COL', 'Valle', '110699'), +('2290', 'Tunja', 'COL', 'Boyacá', '109740'), +('2291', 'Florencia', 'COL', 'Caquetá', '108574'), +('2292', 'Maicao', 'COL', 'La Guajira', '108053'), +('2293', 'Sogamoso', 'COL', 'Boyacá', '107728'), +('2294', 'Giron', 'COL', 'Santander', '90688'), +('2295', 'Moroni', 'COM', 'Njazidja', '36000'), +('2296', 'Brazzaville', 'COG', 'Brazzaville', '950000'), +('2297', 'Pointe-Noire', 'COG', 'Kouilou', '500000'), +('2298', 'Kinshasa', 'COD', 'Kinshasa', '5064000'), +('2299', 'Lubumbashi', 'COD', 'Shaba', '851381'), +('2300', 'Mbuji-Mayi', 'COD', 'East Kasai', '806475'), +('2301', 'Kolwezi', 'COD', 'Shaba', '417810'), +('2302', 'Kisangani', 'COD', 'Haute-Zaďre', '417517'), +('2303', 'Kananga', 'COD', 'West Kasai', '393030'), +('2304', 'Likasi', 'COD', 'Shaba', '299118'), +('2305', 'Bukavu', 'COD', 'South Kivu', '201569'), +('2306', 'Kikwit', 'COD', 'Bandundu', '182142'), +('2307', 'Tshikapa', 'COD', 'West Kasai', '180860'), +('2308', 'Matadi', 'COD', 'Bas-Zaďre', '172730'), +('2309', 'Mbandaka', 'COD', 'Equateur', '169841'), +('2310', 'Mwene-Ditu', 'COD', 'East Kasai', '137459'), +('2311', 'Boma', 'COD', 'Bas-Zaďre', '135284'), +('2312', 'Uvira', 'COD', 'South Kivu', '115590'), +('2313', 'Butembo', 'COD', 'North Kivu', '109406'), +('2314', 'Goma', 'COD', 'North Kivu', '109094'), +('2315', 'Kalemie', 'COD', 'Shaba', '101309'), +('2316', 'Bantam', 'CCK', 'Home Island', '503'), +('2317', 'West Island', 'CCK', 'West Island', '167'), +('2318', 'Pyongyang', 'PRK', 'Pyongyang-si', '2484000'), +('2319', 'Hamhung', 'PRK', 'Hamgyong N', '709730'), +('2320', 'Chongjin', 'PRK', 'Hamgyong P', '582480'), +('2321', 'Nampo', 'PRK', 'Nampo-si', '566200'), +('2322', 'Sinuiju', 'PRK', 'Pyongan P', '326011'), +('2323', 'Wonsan', 'PRK', 'Kangwon', '300148'), +('2324', 'Phyongsong', 'PRK', 'Pyongan N', '272934'), +('2325', 'Sariwon', 'PRK', 'Hwanghae P', '254146'), +('2326', 'Haeju', 'PRK', 'Hwanghae N', '229172'), +('2327', 'Kanggye', 'PRK', 'Chagang', '223410'), +('2328', 'Kimchaek', 'PRK', 'Hamgyong P', '179000'), +('2329', 'Hyesan', 'PRK', 'Yanggang', '178020'), +('2330', 'Kaesong', 'PRK', 'Kaesong-si', '171500'), +('2331', 'Seoul', 'KOR', 'Seoul', '9981619'), +('2332', 'Pusan', 'KOR', 'Pusan', '3804522'), +('2333', 'Inchon', 'KOR', 'Inchon', '2559424'), +('2334', 'Taegu', 'KOR', 'Taegu', '2548568'), +('2335', 'Taejon', 'KOR', 'Taejon', '1425835'), +('2336', 'Kwangju', 'KOR', 'Kwangju', '1368341'), +('2337', 'Ulsan', 'KOR', 'Kyongsangnam', '1084891'), +('2338', 'Songnam', 'KOR', 'Kyonggi', '869094'), +('2339', 'Puchon', 'KOR', 'Kyonggi', '779412'), +('2340', 'Suwon', 'KOR', 'Kyonggi', '755550'), +('2341', 'Anyang', 'KOR', 'Kyonggi', '591106'), +('2342', 'Chonju', 'KOR', 'Chollabuk', '563153'), +('2343', 'Chongju', 'KOR', 'Chungchongbuk', '531376'), +('2344', 'Koyang', 'KOR', 'Kyonggi', '518282'), +('2345', 'Ansan', 'KOR', 'Kyonggi', '510314'), +('2346', 'Pohang', 'KOR', 'Kyongsangbuk', '508899'), +('2347', 'Chang-won', 'KOR', 'Kyongsangnam', '481694'), +('2348', 'Masan', 'KOR', 'Kyongsangnam', '441242'), +('2349', 'Kwangmyong', 'KOR', 'Kyonggi', '350914'), +('2350', 'Chonan', 'KOR', 'Chungchongnam', '330259'), +('2351', 'Chinju', 'KOR', 'Kyongsangnam', '329886'), +('2352', 'Iksan', 'KOR', 'Chollabuk', '322685'), +('2353', 'Pyongtaek', 'KOR', 'Kyonggi', '312927'), +('2354', 'Kumi', 'KOR', 'Kyongsangbuk', '311431'), +('2355', 'Uijongbu', 'KOR', 'Kyonggi', '276111'), +('2356', 'Kyongju', 'KOR', 'Kyongsangbuk', '272968'), +('2357', 'Kunsan', 'KOR', 'Chollabuk', '266569'), +('2358', 'Cheju', 'KOR', 'Cheju', '258511'), +('2359', 'Kimhae', 'KOR', 'Kyongsangnam', '256370'), +('2360', 'Sunchon', 'KOR', 'Chollanam', '249263'), +('2361', 'Mokpo', 'KOR', 'Chollanam', '247452'), +('2362', 'Yong-in', 'KOR', 'Kyonggi', '242643'), +('2363', 'Wonju', 'KOR', 'Kang-won', '237460'), +('2364', 'Kunpo', 'KOR', 'Kyonggi', '235233'), +('2365', 'Chunchon', 'KOR', 'Kang-won', '234528'), +('2366', 'Namyangju', 'KOR', 'Kyonggi', '229060'), +('2367', 'Kangnung', 'KOR', 'Kang-won', '220403'), +('2368', 'Chungju', 'KOR', 'Chungchongbuk', '205206'), +('2369', 'Andong', 'KOR', 'Kyongsangbuk', '188443'), +('2370', 'Yosu', 'KOR', 'Chollanam', '183596'), +('2371', 'Kyongsan', 'KOR', 'Kyongsangbuk', '173746'), +('2372', 'Paju', 'KOR', 'Kyonggi', '163379'), +('2373', 'Yangsan', 'KOR', 'Kyongsangnam', '163351'), +('2374', 'Ichon', 'KOR', 'Kyonggi', '155332'), +('2375', 'Asan', 'KOR', 'Chungchongnam', '154663'), +('2376', 'Koje', 'KOR', 'Kyongsangnam', '147562'), +('2377', 'Kimchon', 'KOR', 'Kyongsangbuk', '147027'), +('2378', 'Nonsan', 'KOR', 'Chungchongnam', '146619'), +('2379', 'Kuri', 'KOR', 'Kyonggi', '142173'), +('2380', 'Chong-up', 'KOR', 'Chollabuk', '139111'), +('2381', 'Chechon', 'KOR', 'Chungchongbuk', '137070'), +('2382', 'Sosan', 'KOR', 'Chungchongnam', '134746'), +('2383', 'Shihung', 'KOR', 'Kyonggi', '133443'), +('2384', 'Tong-yong', 'KOR', 'Kyongsangnam', '131717'), +('2385', 'Kongju', 'KOR', 'Chungchongnam', '131229'), +('2386', 'Yongju', 'KOR', 'Kyongsangbuk', '131097'), +('2387', 'Chinhae', 'KOR', 'Kyongsangnam', '125997'), +('2388', 'Sangju', 'KOR', 'Kyongsangbuk', '124116'), +('2389', 'Poryong', 'KOR', 'Chungchongnam', '122604'), +('2390', 'Kwang-yang', 'KOR', 'Chollanam', '122052'), +('2391', 'Miryang', 'KOR', 'Kyongsangnam', '121501'), +('2392', 'Hanam', 'KOR', 'Kyonggi', '115812'), +('2393', 'Kimje', 'KOR', 'Chollabuk', '115427'), +('2394', 'Yongchon', 'KOR', 'Kyongsangbuk', '113511'), +('2395', 'Sachon', 'KOR', 'Kyongsangnam', '113494'), +('2396', 'Uiwang', 'KOR', 'Kyonggi', '108788'), +('2397', 'Naju', 'KOR', 'Chollanam', '107831'), +('2398', 'Namwon', 'KOR', 'Chollabuk', '103544'), +('2399', 'Tonghae', 'KOR', 'Kang-won', '95472'), +('2400', 'Mun-gyong', 'KOR', 'Kyongsangbuk', '92239'), +('2401', 'Athenai', 'GRC', 'Attika', '772072'), +('2402', 'Thessaloniki', 'GRC', 'Central Macedonia', '383967'), +('2403', 'Pireus', 'GRC', 'Attika', '182671'), +('2404', 'Patras', 'GRC', 'West Greece', '153344'), +('2405', 'Peristerion', 'GRC', 'Attika', '137288'), +('2406', 'Herakleion', 'GRC', 'Crete', '116178'), +('2407', 'Kallithea', 'GRC', 'Attika', '114233'), +('2408', 'Larisa', 'GRC', 'Thessalia', '113090'), +('2409', 'Zagreb', 'HRV', 'Grad Zagreb', '706770'), +('2410', 'Split', 'HRV', 'Split-Dalmatia', '189388'), +('2411', 'Rijeka', 'HRV', 'Primorje-Gorski Kota', '167964'), +('2412', 'Osijek', 'HRV', 'Osijek-Baranja', '104761'), +('2413', 'La Habana', 'CUB', 'La Habana', '2256000'), +('2414', 'Santiago de Cuba', 'CUB', 'Santiago de Cuba', '433180'), +('2415', 'Camagüey', 'CUB', 'Camagüey', '298726'), +('2416', 'Holguín', 'CUB', 'Holguín', '249492'), +('2417', 'Santa Clara', 'CUB', 'Villa Clara', '207350'), +('2418', 'Guantánamo', 'CUB', 'Guantánamo', '205078'), +('2419', 'Pinar del Río', 'CUB', 'Pinar del Río', '142100'), +('2420', 'Bayamo', 'CUB', 'Granma', '141000'), +('2421', 'Cienfuegos', 'CUB', 'Cienfuegos', '132770'), +('2422', 'Victoria de las Tunas', 'CUB', 'Las Tunas', '132350'), +('2423', 'Matanzas', 'CUB', 'Matanzas', '123273'), +('2424', 'Manzanillo', 'CUB', 'Granma', '109350'), +('2425', 'Sancti-Spíritus', 'CUB', 'Sancti-Spíritus', '100751'), +('2426', 'Ciego de Ávila', 'CUB', 'Ciego de Ávila', '98505'), +('2427', 'al-Salimiya', 'KWT', 'Hawalli', '130215'), +('2428', 'Jalib al-Shuyukh', 'KWT', 'Hawalli', '102178'), +('2429', 'Kuwait', 'KWT', 'al-Asima', '28859'), +('2430', 'Nicosia', 'CYP', 'Nicosia', '195000'), +('2431', 'Limassol', 'CYP', 'Limassol', '154400'), +('2432', 'Vientiane', 'LAO', 'Viangchan', '531800'), +('2433', 'Savannakhet', 'LAO', 'Savannakhet', '96652'), +('2434', 'Riga', 'LVA', 'Riika', '764328'), +('2435', 'Daugavpils', 'LVA', 'Daugavpils', '114829'), +('2436', 'Liepaja', 'LVA', 'Liepaja', '89439'), +('2437', 'Maseru', 'LSO', 'Maseru', '297000'), +('2438', 'Beirut', 'LBN', 'Beirut', '1100000'), +('2439', 'Tripoli', 'LBN', 'al-Shamal', '240000'), +('2440', 'Monrovia', 'LBR', 'Montserrado', '850000'), +('2441', 'Tripoli', 'LBY', 'Tripoli', '1682000'), +('2442', 'Bengasi', 'LBY', 'Bengasi', '804000'), +('2443', 'Misrata', 'LBY', 'Misrata', '121669'), +('2444', 'al-Zawiya', 'LBY', 'al-Zawiya', '89338'), +('2445', 'Schaan', 'LIE', 'Schaan', '5346'), +('2446', 'Vaduz', 'LIE', 'Vaduz', '5043'), +('2447', 'Vilnius', 'LTU', 'Vilna', '577969'), +('2448', 'Kaunas', 'LTU', 'Kaunas', '412639'), +('2449', 'Klaipeda', 'LTU', 'Klaipeda', '202451'), +('2450', 'Šiauliai', 'LTU', 'Šiauliai', '146563'), +('2451', 'Panevezys', 'LTU', 'Panevezys', '133695'), +('2452', 'Luxembourg [Luxemburg/Lëtzebuerg]', 'LUX', 'Luxembourg', '80700'), +('2453', 'El-Aaiún', 'ESH', 'El-Aaiún', '169000'), +('2454', 'Macao', 'MAC', 'Macau', '437500'), +('2455', 'Antananarivo', 'MDG', 'Antananarivo', '675669'), +('2456', 'Toamasina', 'MDG', 'Toamasina', '127441'), +('2457', 'Antsirabé', 'MDG', 'Antananarivo', '120239'), +('2458', 'Mahajanga', 'MDG', 'Mahajanga', '100807'), +('2459', 'Fianarantsoa', 'MDG', 'Fianarantsoa', '99005'), +('2460', 'Skopje', 'MKD', 'Skopje', '444299'), +('2461', 'Blantyre', 'MWI', 'Blantyre', '478155'), +('2462', 'Lilongwe', 'MWI', 'Lilongwe', '435964'), +('2463', 'Male', 'MDV', 'Maale', '71000'), +('2464', 'Kuala Lumpur', 'MYS', 'Wilayah Persekutuan', '1297526'), +('2465', 'Ipoh', 'MYS', 'Perak', '382853'), +('2466', 'Johor Baharu', 'MYS', 'Johor', '328436'), +('2467', 'Petaling Jaya', 'MYS', 'Selangor', '254350'), +('2468', 'Kelang', 'MYS', 'Selangor', '243355'), +('2469', 'Kuala Terengganu', 'MYS', 'Terengganu', '228119'), +('2470', 'Pinang', 'MYS', 'Pulau Pinang', '219603'), +('2471', 'Kota Bharu', 'MYS', 'Kelantan', '219582'), +('2472', 'Kuantan', 'MYS', 'Pahang', '199484'), +('2473', 'Taiping', 'MYS', 'Perak', '183261'), +('2474', 'Seremban', 'MYS', 'Negeri Sembilan', '182869'), +('2475', 'Kuching', 'MYS', 'Sarawak', '148059'), +('2476', 'Sibu', 'MYS', 'Sarawak', '126381'), +('2477', 'Sandakan', 'MYS', 'Sabah', '125841'), +('2478', 'Alor Setar', 'MYS', 'Kedah', '124412'), +('2479', 'Selayang Baru', 'MYS', 'Selangor', '124228'), +('2480', 'Sungai Petani', 'MYS', 'Kedah', '114763'), +('2481', 'Shah Alam', 'MYS', 'Selangor', '102019'), +('2482', 'Bamako', 'MLI', 'Bamako', '809552'), +('2483', 'Birkirkara', 'MLT', 'Outer Harbour', '21445'), +('2484', 'Valletta', 'MLT', 'Inner Harbour', '7073'), +('2485', 'Casablanca', 'MAR', 'Casablanca', '2940623'), +('2486', 'Rabat', 'MAR', 'Rabat-Salé-Zammour-Z', '623457'), +('2487', 'Marrakech', 'MAR', 'Marrakech-Tensift-Al', '621914'), +('2488', 'Fčs', 'MAR', 'Fčs-Boulemane', '541162'), +('2489', 'Tanger', 'MAR', 'Tanger-Tétouan', '521735'), +('2490', 'Salé', 'MAR', 'Rabat-Salé-Zammour-Z', '504420'), +('2491', 'Meknčs', 'MAR', 'Meknčs-Tafilalet', '460000'), +('2492', 'Oujda', 'MAR', 'Oriental', '365382'), +('2493', 'Kénitra', 'MAR', 'Gharb-Chrarda-Béni H', '292600'), +('2494', 'Tétouan', 'MAR', 'Tanger-Tétouan', '277516'), +('2495', 'Safi', 'MAR', 'Doukkala-Abda', '262300'), +('2496', 'Agadir', 'MAR', 'Souss Massa-Draâ', '155244'), +('2497', 'Mohammedia', 'MAR', 'Casablanca', '154706'), +('2498', 'Khouribga', 'MAR', 'Chaouia-Ouardigha', '152090'), +('2499', 'Beni-Mellal', 'MAR', 'Tadla-Azilal', '140212'), +('2500', 'Témara', 'MAR', 'Rabat-Salé-Zammour-Z', '126303'), +('2501', 'El Jadida', 'MAR', 'Doukkala-Abda', '119083'), +('2502', 'Nador', 'MAR', 'Oriental', '112450'), +('2503', 'Ksar el Kebir', 'MAR', 'Tanger-Tétouan', '107065'), +('2504', 'Settat', 'MAR', 'Chaouia-Ouardigha', '96200'), +('2505', 'Taza', 'MAR', 'Taza-Al Hoceima-Taou', '92700'), +('2506', 'El Araich', 'MAR', 'Tanger-Tétouan', '90400'), +('2507', 'Dalap-Uliga-Darrit', 'MHL', 'Majuro', '28000'), +('2508', 'Fort-de-France', 'MTQ', 'Fort-de-France', '94050'), +('2509', 'Nouakchott', 'MRT', 'Nouakchott', '667300'), +('2510', 'Nouâdhibou', 'MRT', 'Dakhlet Nouâdhibou', '97600'), +('2511', 'Port-Louis', 'MUS', 'Port-Louis', '138200'), +('2512', 'Beau Bassin-Rose Hill', 'MUS', 'Plaines Wilhelms', '100616'), +('2513', 'Vacoas-Phoenix', 'MUS', 'Plaines Wilhelms', '98464'), +('2514', 'Mamoutzou', 'MYT', 'Mamoutzou', '12000'), +('2515', 'Ciudad de México', 'MEX', 'Distrito Federal', '8591309'), +('2516', 'Guadalajara', 'MEX', 'Jalisco', '1647720'), +('2517', 'Ecatepec de Morelos', 'MEX', 'México', '1620303'), +('2518', 'Puebla', 'MEX', 'Puebla', '1346176'), +('2519', 'Nezahualcóyotl', 'MEX', 'México', '1224924'), +('2520', 'Juárez', 'MEX', 'Chihuahua', '1217818'), +('2521', 'Tijuana', 'MEX', 'Baja California', '1212232'), +('2522', 'León', 'MEX', 'Guanajuato', '1133576'), +('2523', 'Monterrey', 'MEX', 'Nuevo León', '1108499'), +('2524', 'Zapopan', 'MEX', 'Jalisco', '1002239'), +('2525', 'Naucalpan de Juárez', 'MEX', 'México', '857511'), +('2526', 'Mexicali', 'MEX', 'Baja California', '764902'), +('2527', 'Culiacán', 'MEX', 'Sinaloa', '744859'), +('2528', 'Acapulco de Juárez', 'MEX', 'Guerrero', '721011'), +('2529', 'Tlalnepantla de Baz', 'MEX', 'México', '720755'), +('2530', 'Mérida', 'MEX', 'Yucatán', '703324'), +('2531', 'Chihuahua', 'MEX', 'Chihuahua', '670208'), +('2532', 'San Luis Potosí', 'MEX', 'San Luis Potosí', '669353'), +('2533', 'Guadalupe', 'MEX', 'Nuevo León', '668780'), +('2534', 'Toluca', 'MEX', 'México', '665617'), +('2535', 'Aguascalientes', 'MEX', 'Aguascalientes', '643360'), +('2536', 'Querétaro', 'MEX', 'Querétaro de Arteaga', '639839'), +('2537', 'Morelia', 'MEX', 'Michoacán de Ocampo', '619958'), +('2538', 'Hermosillo', 'MEX', 'Sonora', '608697'), +('2539', 'Saltillo', 'MEX', 'Coahuila de Zaragoza', '577352'), +('2540', 'Torreón', 'MEX', 'Coahuila de Zaragoza', '529093'), +('2541', 'Centro (Villahermosa)', 'MEX', 'Tabasco', '519873'), +('2542', 'San Nicolás de los Garza', 'MEX', 'Nuevo León', '495540'), +('2543', 'Durango', 'MEX', 'Durango', '490524'), +('2544', 'Chimalhuacán', 'MEX', 'México', '490245'), +('2545', 'Tlaquepaque', 'MEX', 'Jalisco', '475472'), +('2546', 'Atizapán de Zaragoza', 'MEX', 'México', '467262'), +('2547', 'Veracruz', 'MEX', 'Veracruz', '457119'), +('2548', 'Cuautitlán Izcalli', 'MEX', 'México', '452976'), +('2549', 'Irapuato', 'MEX', 'Guanajuato', '440039'), +('2550', 'Tuxtla Gutiérrez', 'MEX', 'Chiapas', '433544'), +('2551', 'Tultitlán', 'MEX', 'México', '432411'), +('2552', 'Reynosa', 'MEX', 'Tamaulipas', '419776'), +('2553', 'Benito Juárez', 'MEX', 'Quintana Roo', '419276'), +('2554', 'Matamoros', 'MEX', 'Tamaulipas', '416428'), +('2555', 'Xalapa', 'MEX', 'Veracruz', '390058'), +('2556', 'Celaya', 'MEX', 'Guanajuato', '382140'), +('2557', 'Mazatlán', 'MEX', 'Sinaloa', '380265'), +('2558', 'Ensenada', 'MEX', 'Baja California', '369573'), +('2559', 'Ahome', 'MEX', 'Sinaloa', '358663'), +('2560', 'Cajeme', 'MEX', 'Sonora', '355679'), +('2561', 'Cuernavaca', 'MEX', 'Morelos', '337966'), +('2562', 'Tonalá', 'MEX', 'Jalisco', '336109'), +('2563', 'Valle de Chalco Solidaridad', 'MEX', 'México', '323113'), +('2564', 'Nuevo Laredo', 'MEX', 'Tamaulipas', '310277'), +('2565', 'Tepic', 'MEX', 'Nayarit', '305025'), +('2566', 'Tampico', 'MEX', 'Tamaulipas', '294789'), +('2567', 'Ixtapaluca', 'MEX', 'México', '293160'), +('2568', 'Apodaca', 'MEX', 'Nuevo León', '282941'), +('2569', 'Guasave', 'MEX', 'Sinaloa', '277201'), +('2570', 'Gómez Palacio', 'MEX', 'Durango', '272806'), +('2571', 'Tapachula', 'MEX', 'Chiapas', '271141'), +('2572', 'Nicolás Romero', 'MEX', 'México', '269393'), +('2573', 'Coatzacoalcos', 'MEX', 'Veracruz', '267037'), +('2574', 'Uruapan', 'MEX', 'Michoacán de Ocampo', '265211'), +('2575', 'Victoria', 'MEX', 'Tamaulipas', '262686'), +('2576', 'Oaxaca de Juárez', 'MEX', 'Oaxaca', '256848'), +('2577', 'Coacalco de Berriozábal', 'MEX', 'México', '252270'), +('2578', 'Pachuca de Soto', 'MEX', 'Hidalgo', '244688'), +('2579', 'General Escobedo', 'MEX', 'Nuevo León', '232961'), +('2580', 'Salamanca', 'MEX', 'Guanajuato', '226864'), +('2581', 'Santa Catarina', 'MEX', 'Nuevo León', '226573'), +('2582', 'Tehuacán', 'MEX', 'Puebla', '225943'), +('2583', 'Chalco', 'MEX', 'México', '222201'), +('2584', 'Cárdenas', 'MEX', 'Tabasco', '216903'), +('2585', 'Campeche', 'MEX', 'Campeche', '216735'), +('2586', 'La Paz', 'MEX', 'México', '213045'), +('2587', 'Othón P. Blanco (Chetumal)', 'MEX', 'Quintana Roo', '208014'), +('2588', 'Texcoco', 'MEX', 'México', '203681'), +('2589', 'La Paz', 'MEX', 'Baja California Sur', '196708'), +('2590', 'Metepec', 'MEX', 'México', '194265'), +('2591', 'Monclova', 'MEX', 'Coahuila de Zaragoza', '193657'), +('2592', 'Huixquilucan', 'MEX', 'México', '193156'), +('2593', 'Chilpancingo de los Bravo', 'MEX', 'Guerrero', '192509'), +('2594', 'Puerto Vallarta', 'MEX', 'Jalisco', '183741'), +('2595', 'Fresnillo', 'MEX', 'Zacatecas', '182744'), +('2596', 'Ciudad Madero', 'MEX', 'Tamaulipas', '182012'), +('2597', 'Soledad de Graciano Sánchez', 'MEX', 'San Luis Potosí', '179956'), +('2598', 'San Juan del Río', 'MEX', 'Querétaro', '179300'), +('2599', 'San Felipe del Progreso', 'MEX', 'México', '177330'), +('2600', 'Córdoba', 'MEX', 'Veracruz', '176952'), +('2601', 'Tecámac', 'MEX', 'México', '172410'), +('2602', 'Ocosingo', 'MEX', 'Chiapas', '171495'), +('2603', 'Carmen', 'MEX', 'Campeche', '171367'), +('2604', 'Lázaro Cárdenas', 'MEX', 'Michoacán de Ocampo', '170878'), +('2605', 'Jiutepec', 'MEX', 'Morelos', '170428'), +('2606', 'Papantla', 'MEX', 'Veracruz', '170123'), +('2607', 'Comalcalco', 'MEX', 'Tabasco', '164640'), +('2608', 'Zamora', 'MEX', 'Michoacán de Ocampo', '161191'), +('2609', 'Nogales', 'MEX', 'Sonora', '159103'), +('2610', 'Huimanguillo', 'MEX', 'Tabasco', '158335'), +('2611', 'Cuautla', 'MEX', 'Morelos', '153132'), +('2612', 'Minatitlán', 'MEX', 'Veracruz', '152983'), +('2613', 'Poza Rica de Hidalgo', 'MEX', 'Veracruz', '152678'), +('2614', 'Ciudad Valles', 'MEX', 'San Luis Potosí', '146411'), +('2615', 'Navolato', 'MEX', 'Sinaloa', '145396'), +('2616', 'San Luis Río Colorado', 'MEX', 'Sonora', '145276'), +('2617', 'Pénjamo', 'MEX', 'Guanajuato', '143927'), +('2618', 'San Andrés Tuxtla', 'MEX', 'Veracruz', '142251'), +('2619', 'Guanajuato', 'MEX', 'Guanajuato', '141215'), +('2620', 'Navojoa', 'MEX', 'Sonora', '140495'), +('2621', 'Zitácuaro', 'MEX', 'Michoacán de Ocampo', '137970'), +('2622', 'Boca del Río', 'MEX', 'Veracruz-Llave', '135721'), +('2623', 'Allende', 'MEX', 'Guanajuato', '134645'), +('2624', 'Silao', 'MEX', 'Guanajuato', '134037'), +('2625', 'Macuspana', 'MEX', 'Tabasco', '133795'), +('2626', 'San Juan Bautista Tuxtepec', 'MEX', 'Oaxaca', '133675'), +('2627', 'San Cristóbal de las Casas', 'MEX', 'Chiapas', '132317'), +('2628', 'Valle de Santiago', 'MEX', 'Guanajuato', '130557'), +('2629', 'Guaymas', 'MEX', 'Sonora', '130108'), +('2630', 'Colima', 'MEX', 'Colima', '129454'), +('2631', 'Dolores Hidalgo', 'MEX', 'Guanajuato', '128675'), +('2632', 'Lagos de Moreno', 'MEX', 'Jalisco', '127949'), +('2633', 'Piedras Negras', 'MEX', 'Coahuila de Zaragoza', '127898'), +('2634', 'Altamira', 'MEX', 'Tamaulipas', '127490'), +('2635', 'Túxpam', 'MEX', 'Veracruz', '126475'), +('2636', 'San Pedro Garza García', 'MEX', 'Nuevo León', '126147'), +('2637', 'Cuauhtémoc', 'MEX', 'Chihuahua', '124279'), +('2638', 'Manzanillo', 'MEX', 'Colima', '124014'), +('2639', 'Iguala de la Independencia', 'MEX', 'Guerrero', '123883'), +('2640', 'Zacatecas', 'MEX', 'Zacatecas', '123700'), +('2641', 'Tlajomulco de Zúńiga', 'MEX', 'Jalisco', '123220'), +('2642', 'Tulancingo de Bravo', 'MEX', 'Hidalgo', '121946'), +('2643', 'Zinacantepec', 'MEX', 'México', '121715'), +('2644', 'San Martín Texmelucan', 'MEX', 'Puebla', '121093'), +('2645', 'Tepatitlán de Morelos', 'MEX', 'Jalisco', '118948'), +('2646', 'Martínez de la Torre', 'MEX', 'Veracruz', '118815'), +('2647', 'Orizaba', 'MEX', 'Veracruz', '118488'), +('2648', 'Apatzingán', 'MEX', 'Michoacán de Ocampo', '117849'), +('2649', 'Atlixco', 'MEX', 'Puebla', '117019'), +('2650', 'Delicias', 'MEX', 'Chihuahua', '116132'), +('2651', 'Ixtlahuaca', 'MEX', 'México', '115548'), +('2652', 'El Mante', 'MEX', 'Tamaulipas', '112453'), +('2653', 'Lerdo', 'MEX', 'Durango', '112272'), +('2654', 'Almoloya de Juárez', 'MEX', 'México', '110550'), +('2655', 'Acámbaro', 'MEX', 'Guanajuato', '110487'), +('2656', 'Acuńa', 'MEX', 'Coahuila de Zaragoza', '110388'), +('2657', 'Guadalupe', 'MEX', 'Zacatecas', '108881'), +('2658', 'Huejutla de Reyes', 'MEX', 'Hidalgo', '108017'), +('2659', 'Hidalgo', 'MEX', 'Michoacán de Ocampo', '106198'), +('2660', 'Los Cabos', 'MEX', 'Baja California Sur', '105199'), +('2661', 'Comitán de Domínguez', 'MEX', 'Chiapas', '104986'), +('2662', 'Cunduacán', 'MEX', 'Tabasco', '104164'), +('2663', 'Río Bravo', 'MEX', 'Tamaulipas', '103901'), +('2664', 'Temapache', 'MEX', 'Veracruz', '102824'), +('2665', 'Chilapa de Alvarez', 'MEX', 'Guerrero', '102716'), +('2666', 'Hidalgo del Parral', 'MEX', 'Chihuahua', '100881'), +('2667', 'San Francisco del Rincón', 'MEX', 'Guanajuato', '100149'), +('2668', 'Taxco de Alarcón', 'MEX', 'Guerrero', '99907'), +('2669', 'Zumpango', 'MEX', 'México', '99781'), +('2670', 'San Pedro Cholula', 'MEX', 'Puebla', '99734'), +('2671', 'Lerma', 'MEX', 'México', '99714'), +('2672', 'Tecomán', 'MEX', 'Colima', '99296'), +('2673', 'Las Margaritas', 'MEX', 'Chiapas', '97389'), +('2674', 'Cosoleacaque', 'MEX', 'Veracruz', '97199'), +('2675', 'San Luis de la Paz', 'MEX', 'Guanajuato', '96763'), +('2676', 'José Azueta', 'MEX', 'Guerrero', '95448'), +('2677', 'Santiago Ixcuintla', 'MEX', 'Nayarit', '95311'), +('2678', 'San Felipe', 'MEX', 'Guanajuato', '95305'), +('2679', 'Tejupilco', 'MEX', 'México', '94934'), +('2680', 'Tantoyuca', 'MEX', 'Veracruz', '94709'), +('2681', 'Salvatierra', 'MEX', 'Guanajuato', '94322'), +('2682', 'Tultepec', 'MEX', 'México', '93364'), +('2683', 'Temixco', 'MEX', 'Morelos', '92686'), +('2684', 'Matamoros', 'MEX', 'Coahuila de Zaragoza', '91858'), +('2685', 'Pánuco', 'MEX', 'Veracruz', '90551'), +('2686', 'El Fuerte', 'MEX', 'Sinaloa', '89556'), +('2687', 'Tierra Blanca', 'MEX', 'Veracruz', '89143'), +('2688', 'Weno', 'FSM', 'Chuuk', '22000'), +('2689', 'Palikir', 'FSM', 'Pohnpei', '8600'), +('2690', 'Chisinau', 'MDA', 'Chisinau', '719900'), +('2691', 'Tiraspol', 'MDA', 'Dnjestria', '194300'), +('2692', 'Balti', 'MDA', 'Balti', '153400'), +('2693', 'Bender (Tîghina)', 'MDA', 'Bender (Tîghina)', '125700'), +('2694', 'Monte-Carlo', 'MCO', '–', '13154'), +('2695', 'Monaco-Ville', 'MCO', '–', '1234'), +('2696', 'Ulan Bator', 'MNG', 'Ulaanbaatar', '773700'), +('2697', 'Plymouth', 'MSR', 'Plymouth', '2000'), +('2698', 'Maputo', 'MOZ', 'Maputo', '1018938'), +('2699', 'Matola', 'MOZ', 'Maputo', '424662'), +('2700', 'Beira', 'MOZ', 'Sofala', '397368'), +('2701', 'Nampula', 'MOZ', 'Nampula', '303346'), +('2702', 'Chimoio', 'MOZ', 'Manica', '171056'), +('2703', 'Naçala-Porto', 'MOZ', 'Nampula', '158248'), +('2704', 'Quelimane', 'MOZ', 'Zambézia', '150116'), +('2705', 'Mocuba', 'MOZ', 'Zambézia', '124700'), +('2706', 'Tete', 'MOZ', 'Tete', '101984'), +('2707', 'Xai-Xai', 'MOZ', 'Gaza', '99442'), +('2708', 'Gurue', 'MOZ', 'Zambézia', '99300'), +('2709', 'Maxixe', 'MOZ', 'Inhambane', '93985'), +('2710', 'Rangoon (Yangon)', 'MMR', 'Rangoon [Yangon]', '3361700'), +('2711', 'Mandalay', 'MMR', 'Mandalay', '885300'), +('2712', 'Moulmein (Mawlamyine)', 'MMR', 'Mon', '307900'), +('2713', 'Pegu (Bago)', 'MMR', 'Pegu [Bago]', '190900'), +('2714', 'Bassein (Pathein)', 'MMR', 'Irrawaddy [Ayeyarwad', '183900'), +('2715', 'Monywa', 'MMR', 'Sagaing', '138600'), +('2716', 'Sittwe (Akyab)', 'MMR', 'Rakhine', '137600'), +('2717', 'Taunggyi (Taunggye)', 'MMR', 'Shan', '131500'), +('2718', 'Meikhtila', 'MMR', 'Mandalay', '129700'), +('2719', 'Mergui (Myeik)', 'MMR', 'Tenasserim [Tanintha', '122700'), +('2720', 'Lashio (Lasho)', 'MMR', 'Shan', '107600'), +('2721', 'Prome (Pyay)', 'MMR', 'Pegu [Bago]', '105700'), +('2722', 'Henzada (Hinthada)', 'MMR', 'Irrawaddy [Ayeyarwad', '104700'), +('2723', 'Myingyan', 'MMR', 'Mandalay', '103600'), +('2724', 'Tavoy (Dawei)', 'MMR', 'Tenasserim [Tanintha', '96800'), +('2725', 'Pagakku (Pakokku)', 'MMR', 'Magwe [Magway]', '94800'), +('2726', 'Windhoek', 'NAM', 'Khomas', '169000'), +('2727', 'Yangor', 'NRU', '–', '4050'), +('2728', 'Yaren', 'NRU', '–', '559'), +('2729', 'Kathmandu', 'NPL', 'Central', '591835'), +('2730', 'Biratnagar', 'NPL', 'Eastern', '157764'), +('2731', 'Pokhara', 'NPL', 'Western', '146318'), +('2732', 'Lalitapur', 'NPL', 'Central', '145847'), +('2733', 'Birgunj', 'NPL', 'Central', '90639'), +('2734', 'Managua', 'NIC', 'Managua', '959000'), +('2735', 'León', 'NIC', 'León', '123865'), +('2736', 'Chinandega', 'NIC', 'Chinandega', '97387'), +('2737', 'Masaya', 'NIC', 'Masaya', '88971'), +('2738', 'Niamey', 'NER', 'Niamey', '420000'), +('2739', 'Zinder', 'NER', 'Zinder', '120892'), +('2740', 'Maradi', 'NER', 'Maradi', '112965'), +('2741', 'Lagos', 'NGA', 'Lagos', '1518000'), +('2742', 'Ibadan', 'NGA', 'Oyo & Osun', '1432000'), +('2743', 'Ogbomosho', 'NGA', 'Oyo & Osun', '730000'), +('2744', 'Kano', 'NGA', 'Kano & Jigawa', '674100'), +('2745', 'Oshogbo', 'NGA', 'Oyo & Osun', '476800'), +('2746', 'Ilorin', 'NGA', 'Kwara & Kogi', '475800'), +('2747', 'Abeokuta', 'NGA', 'Ogun', '427400'), +('2748', 'Port Harcourt', 'NGA', 'Rivers & Bayelsa', '410000'), +('2749', 'Zaria', 'NGA', 'Kaduna', '379200'), +('2750', 'Ilesha', 'NGA', 'Oyo & Osun', '378400'), +('2751', 'Onitsha', 'NGA', 'Anambra & Enugu & Eb', '371900'), +('2752', 'Iwo', 'NGA', 'Oyo & Osun', '362000'), +('2753', 'Ado-Ekiti', 'NGA', 'Ondo & Ekiti', '359400'), +('2754', 'Abuja', 'NGA', 'Federal Capital Dist', '350100'), +('2755', 'Kaduna', 'NGA', 'Kaduna', '342200'), +('2756', 'Mushin', 'NGA', 'Lagos', '333200'), +('2757', 'Maiduguri', 'NGA', 'Borno & Yobe', '320000'), +('2758', 'Enugu', 'NGA', 'Anambra & Enugu & Eb', '316100'), +('2759', 'Ede', 'NGA', 'Oyo & Osun', '307100'), +('2760', 'Aba', 'NGA', 'Imo & Abia', '298900'), +('2761', 'Ife', 'NGA', 'Oyo & Osun', '296800'), +('2762', 'Ila', 'NGA', 'Oyo & Osun', '264000'), +('2763', 'Oyo', 'NGA', 'Oyo & Osun', '256400'), +('2764', 'Ikerre', 'NGA', 'Ondo & Ekiti', '244600'), +('2765', 'Benin City', 'NGA', 'Edo & Delta', '229400'), +('2766', 'Iseyin', 'NGA', 'Oyo & Osun', '217300'), +('2767', 'Katsina', 'NGA', 'Katsina', '206500'), +('2768', 'Jos', 'NGA', 'Plateau & Nassarawa', '206300'), +('2769', 'Sokoto', 'NGA', 'Sokoto & Kebbi & Zam', '204900'), +('2770', 'Ilobu', 'NGA', 'Oyo & Osun', '199000'), +('2771', 'Offa', 'NGA', 'Kwara & Kogi', '197200'), +('2772', 'Ikorodu', 'NGA', 'Lagos', '184900'), +('2773', 'Ilawe-Ekiti', 'NGA', 'Ondo & Ekiti', '184500'), +('2774', 'Owo', 'NGA', 'Ondo & Ekiti', '183500'), +('2775', 'Ikirun', 'NGA', 'Oyo & Osun', '181400'), +('2776', 'Shaki', 'NGA', 'Oyo & Osun', '174500'), +('2777', 'Calabar', 'NGA', 'Cross River', '174400'), +('2778', 'Ondo', 'NGA', 'Ondo & Ekiti', '173600'), +('2779', 'Akure', 'NGA', 'Ondo & Ekiti', '162300'), +('2780', 'Gusau', 'NGA', 'Sokoto & Kebbi & Zam', '158000'), +('2781', 'Ijebu-Ode', 'NGA', 'Ogun', '156400'), +('2782', 'Effon-Alaiye', 'NGA', 'Oyo & Osun', '153100'), +('2783', 'Kumo', 'NGA', 'Bauchi & Gombe', '148000'), +('2784', 'Shomolu', 'NGA', 'Lagos', '147700'), +('2785', 'Oka-Akoko', 'NGA', 'Ondo & Ekiti', '142900'), +('2786', 'Ikare', 'NGA', 'Ondo & Ekiti', '140800'), +('2787', 'Sapele', 'NGA', 'Edo & Delta', '139200'), +('2788', 'Deba Habe', 'NGA', 'Bauchi & Gombe', '138600'), +('2789', 'Minna', 'NGA', 'Niger', '136900'), +('2790', 'Warri', 'NGA', 'Edo & Delta', '126100'), +('2791', 'Bida', 'NGA', 'Niger', '125500'), +('2792', 'Ikire', 'NGA', 'Oyo & Osun', '123300'), +('2793', 'Makurdi', 'NGA', 'Benue', '123100'), +('2794', 'Lafia', 'NGA', 'Plateau & Nassarawa', '122500'), +('2795', 'Inisa', 'NGA', 'Oyo & Osun', '119800'), +('2796', 'Shagamu', 'NGA', 'Ogun', '117200'), +('2797', 'Awka', 'NGA', 'Anambra & Enugu & Eb', '111200'), +('2798', 'Gombe', 'NGA', 'Bauchi & Gombe', '107800'), +('2799', 'Igboho', 'NGA', 'Oyo & Osun', '106800'), +('2800', 'Ejigbo', 'NGA', 'Oyo & Osun', '105900'), +('2801', 'Agege', 'NGA', 'Lagos', '105000'), +('2802', 'Ise-Ekiti', 'NGA', 'Ondo & Ekiti', '103400'), +('2803', 'Ugep', 'NGA', 'Cross River', '102600'), +('2804', 'Epe', 'NGA', 'Lagos', '101000'), +('2805', 'Alofi', 'NIU', '–', '682'), +('2806', 'Kingston', 'NFK', '–', '800'), +('2807', 'Oslo', 'NOR', 'Oslo', '508726'), +('2808', 'Bergen', 'NOR', 'Hordaland', '230948'), +('2809', 'Trondheim', 'NOR', 'Sřr-Trřndelag', '150166'), +('2810', 'Stavanger', 'NOR', 'Rogaland', '108848'), +('2811', 'Bćrum', 'NOR', 'Akershus', '101340'), +('2812', 'Abidjan', 'CIV', 'Abidjan', '2500000'), +('2813', 'Bouaké', 'CIV', 'Bouaké', '329850'), +('2814', 'Yamoussoukro', 'CIV', 'Yamoussoukro', '130000'), +('2815', 'Daloa', 'CIV', 'Daloa', '121842'), +('2816', 'Korhogo', 'CIV', 'Korhogo', '109445'), +('2817', 'al-Sib', 'OMN', 'Masqat', '155000'), +('2818', 'Salala', 'OMN', 'Zufar', '131813'), +('2819', 'Bawshar', 'OMN', 'Masqat', '107500'), +('2820', 'Suhar', 'OMN', 'al-Batina', '90814'), +('2821', 'Masqat', 'OMN', 'Masqat', '51969'), +('2822', 'Karachi', 'PAK', 'Sindh', '9269265'), +('2823', 'Lahore', 'PAK', 'Punjab', '5063499'), +('2824', 'Faisalabad', 'PAK', 'Punjab', '1977246'), +('2825', 'Rawalpindi', 'PAK', 'Punjab', '1406214'), +('2826', 'Multan', 'PAK', 'Punjab', '1182441'), +('2827', 'Hyderabad', 'PAK', 'Sindh', '1151274'), +('2828', 'Gujranwala', 'PAK', 'Punjab', '1124749'), +('2829', 'Peshawar', 'PAK', 'Nothwest Border Prov', '988005'), +('2830', 'Quetta', 'PAK', 'Baluchistan', '560307'), +('2831', 'Islamabad', 'PAK', 'Islamabad', '524500'), +('2832', 'Sargodha', 'PAK', 'Punjab', '455360'), +('2833', 'Sialkot', 'PAK', 'Punjab', '417597'), +('2834', 'Bahawalpur', 'PAK', 'Punjab', '403408'), +('2835', 'Sukkur', 'PAK', 'Sindh', '329176'), +('2836', 'Jhang', 'PAK', 'Punjab', '292214'), +('2837', 'Sheikhupura', 'PAK', 'Punjab', '271875'), +('2838', 'Larkana', 'PAK', 'Sindh', '270366'), +('2839', 'Gujrat', 'PAK', 'Punjab', '250121'), +('2840', 'Mardan', 'PAK', 'Nothwest Border Prov', '244511'), +('2841', 'Kasur', 'PAK', 'Punjab', '241649'), +('2842', 'Rahim Yar Khan', 'PAK', 'Punjab', '228479'), +('2843', 'Sahiwal', 'PAK', 'Punjab', '207388'), +('2844', 'Okara', 'PAK', 'Punjab', '200901'), +('2845', 'Wah', 'PAK', 'Punjab', '198400'), +('2846', 'Dera Ghazi Khan', 'PAK', 'Punjab', '188100'), +('2847', 'Mirpur Khas', 'PAK', 'Sind', '184500'), +('2848', 'Nawabshah', 'PAK', 'Sind', '183100'), +('2849', 'Mingora', 'PAK', 'Nothwest Border Prov', '174500'), +('2850', 'Chiniot', 'PAK', 'Punjab', '169300'), +('2851', 'Kamoke', 'PAK', 'Punjab', '151000'), +('2852', 'Mandi Burewala', 'PAK', 'Punjab', '149900'), +('2853', 'Jhelum', 'PAK', 'Punjab', '145800'), +('2854', 'Sadiqabad', 'PAK', 'Punjab', '141500'), +('2855', 'Jacobabad', 'PAK', 'Sind', '137700'), +('2856', 'Shikarpur', 'PAK', 'Sind', '133300'), +('2857', 'Khanewal', 'PAK', 'Punjab', '133000'), +('2858', 'Hafizabad', 'PAK', 'Punjab', '130200'), +('2859', 'Kohat', 'PAK', 'Nothwest Border Prov', '125300'), +('2860', 'Muzaffargarh', 'PAK', 'Punjab', '121600'), +('2861', 'Khanpur', 'PAK', 'Punjab', '117800'), +('2862', 'Gojra', 'PAK', 'Punjab', '115000'), +('2863', 'Bahawalnagar', 'PAK', 'Punjab', '109600'), +('2864', 'Muridke', 'PAK', 'Punjab', '108600'), +('2865', 'Pak Pattan', 'PAK', 'Punjab', '107800'), +('2866', 'Abottabad', 'PAK', 'Nothwest Border Prov', '106000'), +('2867', 'Tando Adam', 'PAK', 'Sind', '103400'), +('2868', 'Jaranwala', 'PAK', 'Punjab', '103300'), +('2869', 'Khairpur', 'PAK', 'Sind', '102200'), +('2870', 'Chishtian Mandi', 'PAK', 'Punjab', '101700'), +('2871', 'Daska', 'PAK', 'Punjab', '101500'), +('2872', 'Dadu', 'PAK', 'Sind', '98600'), +('2873', 'Mandi Bahauddin', 'PAK', 'Punjab', '97300'), +('2874', 'Ahmadpur East', 'PAK', 'Punjab', '96000'), +('2875', 'Kamalia', 'PAK', 'Punjab', '95300'), +('2876', 'Khuzdar', 'PAK', 'Baluchistan', '93100'), +('2877', 'Vihari', 'PAK', 'Punjab', '92300'), +('2878', 'Dera Ismail Khan', 'PAK', 'Nothwest Border Prov', '90400'), +('2879', 'Wazirabad', 'PAK', 'Punjab', '89700'), +('2880', 'Nowshera', 'PAK', 'Nothwest Border Prov', '89400'), +('2881', 'Koror', 'PLW', 'Koror', '12000'), +('2882', 'Ciudad de Panamá', 'PAN', 'Panamá', '471373'), +('2883', 'San Miguelito', 'PAN', 'San Miguelito', '315382'), +('2884', 'Port Moresby', 'PNG', 'National Capital Dis', '247000'), +('2885', 'Asunción', 'PRY', 'Asunción', '557776'), +('2886', 'Ciudad del Este', 'PRY', 'Alto Paraná', '133881'), +('2887', 'San Lorenzo', 'PRY', 'Central', '133395'), +('2888', 'Lambaré', 'PRY', 'Central', '99681'), +('2889', 'Fernando de la Mora', 'PRY', 'Central', '95287'), +('2890', 'Lima', 'PER', 'Lima', '6464693'), +('2891', 'Arequipa', 'PER', 'Arequipa', '762000'), +('2892', 'Trujillo', 'PER', 'La Libertad', '652000'), +('2893', 'Chiclayo', 'PER', 'Lambayeque', '517000'), +('2894', 'Callao', 'PER', 'Callao', '424294'), +('2895', 'Iquitos', 'PER', 'Loreto', '367000'), +('2896', 'Chimbote', 'PER', 'Ancash', '336000'), +('2897', 'Huancayo', 'PER', 'Junín', '327000'), +('2898', 'Piura', 'PER', 'Piura', '325000'), +('2899', 'Cusco', 'PER', 'Cusco', '291000'), +('2900', 'Pucallpa', 'PER', 'Ucayali', '220866'), +('2901', 'Tacna', 'PER', 'Tacna', '215683'), +('2902', 'Ica', 'PER', 'Ica', '194820'), +('2903', 'Sullana', 'PER', 'Piura', '147361'), +('2904', 'Juliaca', 'PER', 'Puno', '142576'), +('2905', 'Huánuco', 'PER', 'Huanuco', '129688'), +('2906', 'Ayacucho', 'PER', 'Ayacucho', '118960'), +('2907', 'Chincha Alta', 'PER', 'Ica', '110016'), +('2908', 'Cajamarca', 'PER', 'Cajamarca', '108009'), +('2909', 'Puno', 'PER', 'Puno', '101578'), +('2910', 'Ventanilla', 'PER', 'Callao', '101056'), +('2911', 'Castilla', 'PER', 'Piura', '90642'), +('2912', 'Adamstown', 'PCN', '–', '42'), +('2913', 'Garapan', 'MNP', 'Saipan', '9200'), +('2914', 'Lisboa', 'PRT', 'Lisboa', '563210'), +('2915', 'Porto', 'PRT', 'Porto', '273060'), +('2916', 'Amadora', 'PRT', 'Lisboa', '122106'), +('2917', 'Coímbra', 'PRT', 'Coímbra', '96100'), +('2918', 'Braga', 'PRT', 'Braga', '90535'), +('2919', 'San Juan', 'PRI', 'San Juan', '434374'), +('2920', 'Bayamón', 'PRI', 'Bayamón', '224044'), +('2921', 'Ponce', 'PRI', 'Ponce', '186475'), +('2922', 'Carolina', 'PRI', 'Carolina', '186076'), +('2923', 'Caguas', 'PRI', 'Caguas', '140502'), +('2924', 'Arecibo', 'PRI', 'Arecibo', '100131'), +('2925', 'Guaynabo', 'PRI', 'Guaynabo', '100053'), +('2926', 'Mayagüez', 'PRI', 'Mayagüez', '98434'), +('2927', 'Toa Baja', 'PRI', 'Toa Baja', '94085'), +('2928', 'Warszawa', 'POL', 'Mazowieckie', '1615369'), +('2929', 'Lódz', 'POL', 'Lodzkie', '800110'), +('2930', 'Kraków', 'POL', 'Malopolskie', '738150'), +('2931', 'Wroclaw', 'POL', 'Dolnoslaskie', '636765'), +('2932', 'Poznan', 'POL', 'Wielkopolskie', '576899'), +('2933', 'Gdansk', 'POL', 'Pomorskie', '458988'), +('2934', 'Szczecin', 'POL', 'Zachodnio-Pomorskie', '416988'), +('2935', 'Bydgoszcz', 'POL', 'Kujawsko-Pomorskie', '386855'), +('2936', 'Lublin', 'POL', 'Lubelskie', '356251'), +('2937', 'Katowice', 'POL', 'Slaskie', '345934'), +('2938', 'Bialystok', 'POL', 'Podlaskie', '283937'), +('2939', 'Czestochowa', 'POL', 'Slaskie', '257812'), +('2940', 'Gdynia', 'POL', 'Pomorskie', '253521'), +('2941', 'Sosnowiec', 'POL', 'Slaskie', '244102'), +('2942', 'Radom', 'POL', 'Mazowieckie', '232262'), +('2943', 'Kielce', 'POL', 'Swietokrzyskie', '212383'), +('2944', 'Gliwice', 'POL', 'Slaskie', '212164'), +('2945', 'Torun', 'POL', 'Kujawsko-Pomorskie', '206158'), +('2946', 'Bytom', 'POL', 'Slaskie', '205560'), +('2947', 'Zabrze', 'POL', 'Slaskie', '200177'), +('2948', 'Bielsko-Biala', 'POL', 'Slaskie', '180307'), +('2949', 'Olsztyn', 'POL', 'Warminsko-Mazurskie', '170904'), +('2950', 'Rzeszów', 'POL', 'Podkarpackie', '162049'), +('2951', 'Ruda Slaska', 'POL', 'Slaskie', '159665'), +('2952', 'Rybnik', 'POL', 'Slaskie', '144582'), +('2953', 'Walbrzych', 'POL', 'Dolnoslaskie', '136923'), +('2954', 'Tychy', 'POL', 'Slaskie', '133178'), +('2955', 'Dabrowa Górnicza', 'POL', 'Slaskie', '131037'), +('2956', 'Plock', 'POL', 'Mazowieckie', '131011'), +('2957', 'Elblag', 'POL', 'Warminsko-Mazurskie', '129782'), +('2958', 'Opole', 'POL', 'Opolskie', '129553'), +('2959', 'Gorzów Wielkopolski', 'POL', 'Lubuskie', '126019'), +('2960', 'Wloclawek', 'POL', 'Kujawsko-Pomorskie', '123373'), +('2961', 'Chorzów', 'POL', 'Slaskie', '121708'), +('2962', 'Tarnów', 'POL', 'Malopolskie', '121494'), +('2963', 'Zielona Góra', 'POL', 'Lubuskie', '118182'), +('2964', 'Koszalin', 'POL', 'Zachodnio-Pomorskie', '112375'), +('2965', 'Legnica', 'POL', 'Dolnoslaskie', '109335'), +('2966', 'Kalisz', 'POL', 'Wielkopolskie', '106641'), +('2967', 'Grudziadz', 'POL', 'Kujawsko-Pomorskie', '102434'), +('2968', 'Slupsk', 'POL', 'Pomorskie', '102370'), +('2969', 'Jastrzebie-Zdrój', 'POL', 'Slaskie', '102294'), +('2970', 'Jaworzno', 'POL', 'Slaskie', '97929'), +('2971', 'Jelenia Góra', 'POL', 'Dolnoslaskie', '93901'), +('2972', 'Malabo', 'GNQ', 'Bioko', '40000'), +('2973', 'Doha', 'QAT', 'Doha', '355000'), +('2974', 'Paris', 'FRA', 'Île-de-France', '2125246'), +('2975', 'Marseille', 'FRA', 'Provence-Alpes-Côte', '798430'), +('2976', 'Lyon', 'FRA', 'Rhône-Alpes', '445452'), +('2977', 'Toulouse', 'FRA', 'Midi-Pyrénées', '390350'), +('2978', 'Nice', 'FRA', 'Provence-Alpes-Côte', '342738'), +('2979', 'Nantes', 'FRA', 'Pays de la Loire', '270251'), +('2980', 'Strasbourg', 'FRA', 'Alsace', '264115'), +('2981', 'Montpellier', 'FRA', 'Languedoc-Roussillon', '225392'), +('2982', 'Bordeaux', 'FRA', 'Aquitaine', '215363'), +('2983', 'Rennes', 'FRA', 'Haute-Normandie', '206229'), +('2984', 'Le Havre', 'FRA', 'Champagne-Ardenne', '190905'), +('2985', 'Reims', 'FRA', 'Nord-Pas-de-Calais', '187206'), +('2986', 'Lille', 'FRA', 'Rhône-Alpes', '184657'), +('2987', 'St-Étienne', 'FRA', 'Bretagne', '180210'), +('2988', 'Toulon', 'FRA', 'Provence-Alpes-Côte', '160639'), +('2989', 'Grenoble', 'FRA', 'Rhône-Alpes', '153317'), +('2990', 'Angers', 'FRA', 'Pays de la Loire', '151279'), +('2991', 'Dijon', 'FRA', 'Bourgogne', '149867'), +('2992', 'Brest', 'FRA', 'Bretagne', '149634'), +('2993', 'Le Mans', 'FRA', 'Pays de la Loire', '146105'), +('2994', 'Clermont-Ferrand', 'FRA', 'Auvergne', '137140'), +('2995', 'Amiens', 'FRA', 'Picardie', '135501'), +('2996', 'Aix-en-Provence', 'FRA', 'Provence-Alpes-Côte', '134222'), +('2997', 'Limoges', 'FRA', 'Limousin', '133968'), +('2998', 'Nîmes', 'FRA', 'Languedoc-Roussillon', '133424'), +('2999', 'Tours', 'FRA', 'Centre', '132820'); + +INSERT INTO city (id, name, countrycode, district, population) VALUES +('3000', 'Villeurbanne', 'FRA', 'Rhône-Alpes', '124215'), +('3001', 'Metz', 'FRA', 'Lorraine', '123776'), +('3002', 'Besançon', 'FRA', 'Franche-Comté', '117733'), +('3003', 'Caen', 'FRA', 'Basse-Normandie', '113987'), +('3004', 'Orléans', 'FRA', 'Centre', '113126'), +('3005', 'Mulhouse', 'FRA', 'Alsace', '110359'), +('3006', 'Rouen', 'FRA', 'Haute-Normandie', '106592'), +('3007', 'Boulogne-Billancourt', 'FRA', 'Île-de-France', '106367'), +('3008', 'Perpignan', 'FRA', 'Languedoc-Roussillon', '105115'), +('3009', 'Nancy', 'FRA', 'Lorraine', '103605'), +('3010', 'Roubaix', 'FRA', 'Nord-Pas-de-Calais', '96984'), +('3011', 'Argenteuil', 'FRA', 'Île-de-France', '93961'), +('3012', 'Tourcoing', 'FRA', 'Nord-Pas-de-Calais', '93540'), +('3013', 'Montreuil', 'FRA', 'Île-de-France', '90674'), +('3014', 'Cayenne', 'GUF', 'Cayenne', '50699'), +('3015', 'Faaa', 'PYF', 'Tahiti', '25888'), +('3016', 'Papeete', 'PYF', 'Tahiti', '25553'), +('3017', 'Saint-Denis', 'REU', 'Saint-Denis', '131480'), +('3018', 'Bucuresti', 'ROM', 'Bukarest', '2016131'), +('3019', 'Iasi', 'ROM', 'Iasi', '348070'), +('3020', 'Constanta', 'ROM', 'Constanta', '342264'), +('3021', 'Cluj-Napoca', 'ROM', 'Cluj', '332498'), +('3022', 'Galati', 'ROM', 'Galati', '330276'), +('3023', 'Timisoara', 'ROM', 'Timis', '324304'), +('3024', 'Brasov', 'ROM', 'Brasov', '314225'), +('3025', 'Craiova', 'ROM', 'Dolj', '313530'), +('3026', 'Ploiesti', 'ROM', 'Prahova', '251348'), +('3027', 'Braila', 'ROM', 'Braila', '233756'), +('3028', 'Oradea', 'ROM', 'Bihor', '222239'), +('3029', 'Bacau', 'ROM', 'Bacau', '209235'), +('3030', 'Pitesti', 'ROM', 'Arges', '187170'), +('3031', 'Arad', 'ROM', 'Arad', '184408'), +('3032', 'Sibiu', 'ROM', 'Sibiu', '169611'), +('3033', 'Târgu Mures', 'ROM', 'Mures', '165153'), +('3034', 'Baia Mare', 'ROM', 'Maramures', '149665'), +('3035', 'Buzau', 'ROM', 'Buzau', '148372'), +('3036', 'Satu Mare', 'ROM', 'Satu Mare', '130059'), +('3037', 'Botosani', 'ROM', 'Botosani', '128730'), +('3038', 'Piatra Neamt', 'ROM', 'Neamt', '125070'), +('3039', 'Râmnicu Vâlcea', 'ROM', 'Vâlcea', '119741'), +('3040', 'Suceava', 'ROM', 'Suceava', '118549'), +('3041', 'Drobeta-Turnu Severin', 'ROM', 'Mehedinti', '117865'), +('3042', 'Târgoviste', 'ROM', 'Dâmbovita', '98980'), +('3043', 'Focsani', 'ROM', 'Vrancea', '98979'), +('3044', 'Târgu Jiu', 'ROM', 'Gorj', '98524'), +('3045', 'Tulcea', 'ROM', 'Tulcea', '96278'), +('3046', 'Resita', 'ROM', 'Caras-Severin', '93976'), +('3047', 'Kigali', 'RWA', 'Kigali', '286000'), +('3048', 'Stockholm', 'SWE', 'Lisboa', '750348'), +('3049', 'Gothenburg [Göteborg]', 'SWE', 'West Götanmaan län', '466990'), +('3050', 'Malmö', 'SWE', 'Skĺne län', '259579'), +('3051', 'Uppsala', 'SWE', 'Uppsala län', '189569'), +('3052', 'Linköping', 'SWE', 'East Götanmaan län', '133168'), +('3053', 'Västerĺs', 'SWE', 'Västmanlands län', '126328'), +('3054', 'Örebro', 'SWE', 'Örebros län', '124207'), +('3055', 'Norrköping', 'SWE', 'East Götanmaan län', '122199'), +('3056', 'Helsingborg', 'SWE', 'Skĺne län', '117737'), +('3057', 'Jönköping', 'SWE', 'Jönköpings län', '117095'), +('3058', 'Umeĺ', 'SWE', 'Västerbottens län', '104512'), +('3059', 'Lund', 'SWE', 'Skĺne län', '98948'), +('3060', 'Borĺs', 'SWE', 'West Götanmaan län', '96883'), +('3061', 'Sundsvall', 'SWE', 'Västernorrlands län', '93126'), +('3062', 'Gävle', 'SWE', 'Gävleborgs län', '90742'), +('3063', 'Jamestown', 'SHN', 'Saint Helena', '1500'), +('3064', 'Basseterre', 'KNA', 'St George Basseterre', '11600'), +('3065', 'Castries', 'LCA', 'Castries', '2301'), +('3066', 'Kingstown', 'VCT', 'St George', '17100'), +('3067', 'Saint-Pierre', 'SPM', 'Saint-Pierre', '5808'), +('3068', 'Berlin', 'DEU', 'Berliini', '3386667'), +('3069', 'Hamburg', 'DEU', 'Hamburg', '1704735'), +('3070', 'Munich [München]', 'DEU', 'Baijeri', '1194560'), +('3071', 'Köln', 'DEU', 'Nordrhein-Westfalen', '962507'), +('3072', 'Frankfurt am Main', 'DEU', 'Hessen', '643821'), +('3073', 'Essen', 'DEU', 'Nordrhein-Westfalen', '599515'), +('3074', 'Dortmund', 'DEU', 'Nordrhein-Westfalen', '590213'), +('3075', 'Stuttgart', 'DEU', 'Baden-Württemberg', '582443'), +('3076', 'Düsseldorf', 'DEU', 'Nordrhein-Westfalen', '568855'), +('3077', 'Bremen', 'DEU', 'Bremen', '540330'), +('3078', 'Duisburg', 'DEU', 'Nordrhein-Westfalen', '519793'), +('3079', 'Hannover', 'DEU', 'Niedersachsen', '514718'), +('3080', 'Leipzig', 'DEU', 'Saksi', '489532'), +('3081', 'Nürnberg', 'DEU', 'Baijeri', '486628'), +('3082', 'Dresden', 'DEU', 'Saksi', '476668'), +('3083', 'Bochum', 'DEU', 'Nordrhein-Westfalen', '392830'), +('3084', 'Wuppertal', 'DEU', 'Nordrhein-Westfalen', '368993'), +('3085', 'Bielefeld', 'DEU', 'Nordrhein-Westfalen', '321125'), +('3086', 'Mannheim', 'DEU', 'Baden-Württemberg', '307730'), +('3087', 'Bonn', 'DEU', 'Nordrhein-Westfalen', '301048'), +('3088', 'Gelsenkirchen', 'DEU', 'Nordrhein-Westfalen', '281979'), +('3089', 'Karlsruhe', 'DEU', 'Baden-Württemberg', '277204'), +('3090', 'Wiesbaden', 'DEU', 'Hessen', '268716'), +('3091', 'Münster', 'DEU', 'Nordrhein-Westfalen', '264670'), +('3092', 'Mönchengladbach', 'DEU', 'Nordrhein-Westfalen', '263697'), +('3093', 'Chemnitz', 'DEU', 'Saksi', '263222'), +('3094', 'Augsburg', 'DEU', 'Baijeri', '254867'), +('3095', 'Halle/Saale', 'DEU', 'Anhalt Sachsen', '254360'), +('3096', 'Braunschweig', 'DEU', 'Niedersachsen', '246322'), +('3097', 'Aachen', 'DEU', 'Nordrhein-Westfalen', '243825'), +('3098', 'Krefeld', 'DEU', 'Nordrhein-Westfalen', '241769'), +('3099', 'Magdeburg', 'DEU', 'Anhalt Sachsen', '235073'), +('3100', 'Kiel', 'DEU', 'Schleswig-Holstein', '233795'), +('3101', 'Oberhausen', 'DEU', 'Nordrhein-Westfalen', '222349'), +('3102', 'Lübeck', 'DEU', 'Schleswig-Holstein', '213326'), +('3103', 'Hagen', 'DEU', 'Nordrhein-Westfalen', '205201'), +('3104', 'Rostock', 'DEU', 'Mecklenburg-Vorpomme', '203279'), +('3105', 'Freiburg im Breisgau', 'DEU', 'Baden-Württemberg', '202455'), +('3106', 'Erfurt', 'DEU', 'Thüringen', '201267'), +('3107', 'Kassel', 'DEU', 'Hessen', '196211'), +('3108', 'Saarbrücken', 'DEU', 'Saarland', '183836'), +('3109', 'Mainz', 'DEU', 'Rheinland-Pfalz', '183134'), +('3110', 'Hamm', 'DEU', 'Nordrhein-Westfalen', '181804'), +('3111', 'Herne', 'DEU', 'Nordrhein-Westfalen', '175661'), +('3112', 'Mülheim an der Ruhr', 'DEU', 'Nordrhein-Westfalen', '173895'), +('3113', 'Solingen', 'DEU', 'Nordrhein-Westfalen', '165583'), +('3114', 'Osnabrück', 'DEU', 'Niedersachsen', '164539'), +('3115', 'Ludwigshafen am Rhein', 'DEU', 'Rheinland-Pfalz', '163771'), +('3116', 'Leverkusen', 'DEU', 'Nordrhein-Westfalen', '160841'), +('3117', 'Oldenburg', 'DEU', 'Niedersachsen', '154125'), +('3118', 'Neuss', 'DEU', 'Nordrhein-Westfalen', '149702'), +('3119', 'Heidelberg', 'DEU', 'Baden-Württemberg', '139672'), +('3120', 'Darmstadt', 'DEU', 'Hessen', '137776'), +('3121', 'Paderborn', 'DEU', 'Nordrhein-Westfalen', '137647'), +('3122', 'Potsdam', 'DEU', 'Brandenburg', '128983'), +('3123', 'Würzburg', 'DEU', 'Baijeri', '127350'), +('3124', 'Regensburg', 'DEU', 'Baijeri', '125236'), +('3125', 'Recklinghausen', 'DEU', 'Nordrhein-Westfalen', '125022'), +('3126', 'Göttingen', 'DEU', 'Niedersachsen', '124775'), +('3127', 'Bremerhaven', 'DEU', 'Bremen', '122735'), +('3128', 'Wolfsburg', 'DEU', 'Niedersachsen', '121954'), +('3129', 'Bottrop', 'DEU', 'Nordrhein-Westfalen', '121097'), +('3130', 'Remscheid', 'DEU', 'Nordrhein-Westfalen', '120125'), +('3131', 'Heilbronn', 'DEU', 'Baden-Württemberg', '119526'), +('3132', 'Pforzheim', 'DEU', 'Baden-Württemberg', '117227'), +('3133', 'Offenbach am Main', 'DEU', 'Hessen', '116627'), +('3134', 'Ulm', 'DEU', 'Baden-Württemberg', '116103'), +('3135', 'Ingolstadt', 'DEU', 'Baijeri', '114826'), +('3136', 'Gera', 'DEU', 'Thüringen', '114718'), +('3137', 'Salzgitter', 'DEU', 'Niedersachsen', '112934'), +('3138', 'Cottbus', 'DEU', 'Brandenburg', '110894'), +('3139', 'Reutlingen', 'DEU', 'Baden-Württemberg', '110343'), +('3140', 'Fürth', 'DEU', 'Baijeri', '109771'), +('3141', 'Siegen', 'DEU', 'Nordrhein-Westfalen', '109225'), +('3142', 'Koblenz', 'DEU', 'Rheinland-Pfalz', '108003'), +('3143', 'Moers', 'DEU', 'Nordrhein-Westfalen', '106837'), +('3144', 'Bergisch Gladbach', 'DEU', 'Nordrhein-Westfalen', '106150'), +('3145', 'Zwickau', 'DEU', 'Saksi', '104146'), +('3146', 'Hildesheim', 'DEU', 'Niedersachsen', '104013'), +('3147', 'Witten', 'DEU', 'Nordrhein-Westfalen', '103384'), +('3148', 'Schwerin', 'DEU', 'Mecklenburg-Vorpomme', '102878'), +('3149', 'Erlangen', 'DEU', 'Baijeri', '100750'), +('3150', 'Kaiserslautern', 'DEU', 'Rheinland-Pfalz', '100025'), +('3151', 'Trier', 'DEU', 'Rheinland-Pfalz', '99891'), +('3152', 'Jena', 'DEU', 'Thüringen', '99779'), +('3153', 'Iserlohn', 'DEU', 'Nordrhein-Westfalen', '99474'), +('3154', 'Gütersloh', 'DEU', 'Nordrhein-Westfalen', '95028'), +('3155', 'Marl', 'DEU', 'Nordrhein-Westfalen', '93735'), +('3156', 'Lünen', 'DEU', 'Nordrhein-Westfalen', '92044'), +('3157', 'Düren', 'DEU', 'Nordrhein-Westfalen', '91092'), +('3158', 'Ratingen', 'DEU', 'Nordrhein-Westfalen', '90951'), +('3159', 'Velbert', 'DEU', 'Nordrhein-Westfalen', '89881'), +('3160', 'Esslingen am Neckar', 'DEU', 'Baden-Württemberg', '89667'), +('3161', 'Honiara', 'SLB', 'Honiara', '50100'), +('3162', 'Lusaka', 'ZMB', 'Lusaka', '1317000'), +('3163', 'Ndola', 'ZMB', 'Copperbelt', '329200'), +('3164', 'Kitwe', 'ZMB', 'Copperbelt', '288600'), +('3165', 'Kabwe', 'ZMB', 'Central', '154300'), +('3166', 'Chingola', 'ZMB', 'Copperbelt', '142400'), +('3167', 'Mufulira', 'ZMB', 'Copperbelt', '123900'), +('3168', 'Luanshya', 'ZMB', 'Copperbelt', '118100'), +('3169', 'Apia', 'WSM', 'Upolu', '35900'), +('3170', 'Serravalle', 'SMR', 'Serravalle/Dogano', '4802'), +('3171', 'San Marino', 'SMR', 'San Marino', '2294'), +('3172', 'Săo Tomé', 'STP', 'Aqua Grande', '49541'), +('3173', 'Riyadh', 'SAU', 'Riyadh', '3324000'), +('3174', 'Jedda', 'SAU', 'Mekka', '2046300'), +('3175', 'Mekka', 'SAU', 'Mekka', '965700'), +('3176', 'Medina', 'SAU', 'Medina', '608300'), +('3177', 'al-Dammam', 'SAU', 'al-Sharqiya', '482300'), +('3178', 'al-Taif', 'SAU', 'Mekka', '416100'), +('3179', 'Tabuk', 'SAU', 'Tabuk', '292600'), +('3180', 'Burayda', 'SAU', 'al-Qasim', '248600'), +('3181', 'al-Hufuf', 'SAU', 'al-Sharqiya', '225800'), +('3182', 'al-Mubarraz', 'SAU', 'al-Sharqiya', '219100'), +('3183', 'Khamis Mushayt', 'SAU', 'Asir', '217900'), +('3184', 'Hail', 'SAU', 'Hail', '176800'), +('3185', 'al-Kharj', 'SAU', 'Riad', '152100'), +('3186', 'al-Khubar', 'SAU', 'al-Sharqiya', '141700'), +('3187', 'Jubayl', 'SAU', 'al-Sharqiya', '140800'), +('3188', 'Hafar al-Batin', 'SAU', 'al-Sharqiya', '137800'), +('3189', 'al-Tuqba', 'SAU', 'al-Sharqiya', '125700'), +('3190', 'Yanbu', 'SAU', 'Medina', '119800'), +('3191', 'Abha', 'SAU', 'Asir', '112300'), +('3192', 'Ara´ar', 'SAU', 'al-Khudud al-Samaliy', '108100'), +('3193', 'al-Qatif', 'SAU', 'al-Sharqiya', '98900'), +('3194', 'al-Hawiya', 'SAU', 'Mekka', '93900'), +('3195', 'Unayza', 'SAU', 'Qasim', '91100'), +('3196', 'Najran', 'SAU', 'Najran', '91000'), +('3197', 'Pikine', 'SEN', 'Cap-Vert', '855287'), +('3198', 'Dakar', 'SEN', 'Cap-Vert', '785071'), +('3199', 'Thičs', 'SEN', 'Thičs', '248000'), +('3200', 'Kaolack', 'SEN', 'Kaolack', '199000'), +('3201', 'Ziguinchor', 'SEN', 'Ziguinchor', '192000'), +('3202', 'Rufisque', 'SEN', 'Cap-Vert', '150000'), +('3203', 'Saint-Louis', 'SEN', 'Saint-Louis', '132400'), +('3204', 'Mbour', 'SEN', 'Thičs', '109300'), +('3205', 'Diourbel', 'SEN', 'Diourbel', '99400'), +('3206', 'Victoria', 'SYC', 'Mahé', '41000'), +('3207', 'Freetown', 'SLE', 'Western', '850000'), +('3208', 'Singapore', 'SGP', '–', '4017733'), +('3209', 'Bratislava', 'SVK', 'Bratislava', '448292'), +('3210', 'Košice', 'SVK', 'Východné Slovensko', '241874'), +('3211', 'Prešov', 'SVK', 'Východné Slovensko', '93977'), +('3212', 'Ljubljana', 'SVN', 'Osrednjeslovenska', '270986'), +('3213', 'Maribor', 'SVN', 'Podravska', '115532'), +('3214', 'Mogadishu', 'SOM', 'Banaadir', '997000'), +('3215', 'Hargeysa', 'SOM', 'Woqooyi Galbeed', '90000'), +('3216', 'Kismaayo', 'SOM', 'Jubbada Hoose', '90000'), +('3217', 'Colombo', 'LKA', 'Western', '645000'), +('3218', 'Dehiwala', 'LKA', 'Western', '203000'), +('3219', 'Moratuwa', 'LKA', 'Western', '190000'), +('3220', 'Jaffna', 'LKA', 'Northern', '149000'), +('3221', 'Kandy', 'LKA', 'Central', '140000'), +('3222', 'Sri Jayawardenepura Kotte', 'LKA', 'Western', '118000'), +('3223', 'Negombo', 'LKA', 'Western', '100000'), +('3224', 'Omdurman', 'SDN', 'Khartum', '1271403'), +('3225', 'Khartum', 'SDN', 'Khartum', '947483'), +('3226', 'Sharq al-Nil', 'SDN', 'Khartum', '700887'), +('3227', 'Port Sudan', 'SDN', 'al-Bahr al-Ahmar', '308195'), +('3228', 'Kassala', 'SDN', 'Kassala', '234622'), +('3229', 'Obeid', 'SDN', 'Kurdufan al-Shamaliy', '229425'), +('3230', 'Nyala', 'SDN', 'Darfur al-Janubiya', '227183'), +('3231', 'Wad Madani', 'SDN', 'al-Jazira', '211362'), +('3232', 'al-Qadarif', 'SDN', 'al-Qadarif', '191164'), +('3233', 'Kusti', 'SDN', 'al-Bahr al-Abyad', '173599'), +('3234', 'al-Fashir', 'SDN', 'Darfur al-Shamaliya', '141884'), +('3235', 'Juba', 'SDN', 'Bahr al-Jabal', '114980'), +('3236', 'Helsinki [Helsingfors]', 'FIN', 'Newmaa', '555474'), +('3237', 'Espoo', 'FIN', 'Newmaa', '213271'), +('3238', 'Tampere', 'FIN', 'Pirkanmaa', '195468'), +('3239', 'Vantaa', 'FIN', 'Newmaa', '178471'), +('3240', 'Turku [Ĺbo]', 'FIN', 'Varsinais-Suomi', '172561'), +('3241', 'Oulu', 'FIN', 'Pohjois-Pohjanmaa', '120753'), +('3242', 'Lahti', 'FIN', 'Päijät-Häme', '96921'), +('3243', 'Paramaribo', 'SUR', 'Paramaribo', '112000'), +('3244', 'Mbabane', 'SWZ', 'Hhohho', '61000'), +('3245', 'Zürich', 'CHE', 'Zürich', '336800'), +('3246', 'Geneve', 'CHE', 'Geneve', '173500'), +('3247', 'Basel', 'CHE', 'Basel-Stadt', '166700'), +('3248', 'Bern', 'CHE', 'Bern', '122700'), +('3249', 'Lausanne', 'CHE', 'Vaud', '114500'), +('3250', 'Damascus', 'SYR', 'Damascus', '1347000'), +('3251', 'Aleppo', 'SYR', 'Aleppo', '1261983'), +('3252', 'Hims', 'SYR', 'Hims', '507404'), +('3253', 'Hama', 'SYR', 'Hama', '343361'), +('3254', 'Latakia', 'SYR', 'Latakia', '264563'), +('3255', 'al-Qamishliya', 'SYR', 'al-Hasaka', '144286'), +('3256', 'Dayr al-Zawr', 'SYR', 'Dayr al-Zawr', '140459'), +('3257', 'Jaramana', 'SYR', 'Damaskos', '138469'), +('3258', 'Duma', 'SYR', 'Damaskos', '131158'), +('3259', 'al-Raqqa', 'SYR', 'al-Raqqa', '108020'), +('3260', 'Idlib', 'SYR', 'Idlib', '91081'), +('3261', 'Dushanbe', 'TJK', 'Karotegin', '524000'), +('3262', 'Khujand', 'TJK', 'Khujand', '161500'), +('3263', 'Taipei', 'TWN', 'Taipei', '2641312'), +('3264', 'Kaohsiung', 'TWN', 'Kaohsiung', '1475505'), +('3265', 'Taichung', 'TWN', 'Taichung', '940589'), +('3266', 'Tainan', 'TWN', 'Tainan', '728060'), +('3267', 'Panchiao', 'TWN', 'Taipei', '523850'), +('3268', 'Chungho', 'TWN', 'Taipei', '392176'), +('3269', 'Keelung (Chilung)', 'TWN', 'Keelung', '385201'), +('3270', 'Sanchung', 'TWN', 'Taipei', '380084'), +('3271', 'Hsinchuang', 'TWN', 'Taipei', '365048'), +('3272', 'Hsinchu', 'TWN', 'Hsinchu', '361958'), +('3273', 'Chungli', 'TWN', 'Taoyuan', '318649'), +('3274', 'Fengshan', 'TWN', 'Kaohsiung', '318562'), +('3275', 'Taoyuan', 'TWN', 'Taoyuan', '316438'), +('3276', 'Chiayi', 'TWN', 'Chiayi', '265109'), +('3277', 'Hsintien', 'TWN', 'Taipei', '263603'), +('3278', 'Changhwa', 'TWN', 'Changhwa', '227715'), +('3279', 'Yungho', 'TWN', 'Taipei', '227700'), +('3280', 'Tucheng', 'TWN', 'Taipei', '224897'), +('3281', 'Pingtung', 'TWN', 'Pingtung', '214727'), +('3282', 'Yungkang', 'TWN', 'Tainan', '193005'), +('3283', 'Pingchen', 'TWN', 'Taoyuan', '188344'), +('3284', 'Tali', 'TWN', 'Taichung', '171940'), +('3285', 'Taiping', 'TWN', '-', '165524'), +('3286', 'Pate', 'TWN', 'Taoyuan', '161700'), +('3287', 'Fengyuan', 'TWN', 'Taichung', '161032'), +('3288', 'Luchou', 'TWN', 'Taipei', '160516'), +('3289', 'Hsichuh', 'TWN', 'Taipei', '154976'), +('3290', 'Shulin', 'TWN', 'Taipei', '151260'), +('3291', 'Yuanlin', 'TWN', 'Changhwa', '126402'), +('3292', 'Yangmei', 'TWN', 'Taoyuan', '126323'), +('3293', 'Taliao', 'TWN', '-', '115897'), +('3294', 'Kueishan', 'TWN', '-', '112195'), +('3295', 'Tanshui', 'TWN', 'Taipei', '111882'), +('3296', 'Taitung', 'TWN', 'Taitung', '111039'), +('3297', 'Hualien', 'TWN', 'Hualien', '108407'), +('3298', 'Nantou', 'TWN', 'Nantou', '104723'), +('3299', 'Lungtan', 'TWN', 'Taipei', '103088'), +('3300', 'Touliu', 'TWN', 'Yünlin', '98900'), +('3301', 'Tsaotun', 'TWN', 'Nantou', '96800'), +('3302', 'Kangshan', 'TWN', 'Kaohsiung', '92200'), +('3303', 'Ilan', 'TWN', 'Ilan', '92000'), +('3304', 'Miaoli', 'TWN', 'Miaoli', '90000'), +('3305', 'Dar es Salaam', 'TZA', 'Dar es Salaam', '1747000'), +('3306', 'Dodoma', 'TZA', 'Dodoma', '189000'), +('3307', 'Mwanza', 'TZA', 'Mwanza', '172300'), +('3308', 'Zanzibar', 'TZA', 'Zanzibar West', '157634'), +('3309', 'Tanga', 'TZA', 'Tanga', '137400'), +('3310', 'Mbeya', 'TZA', 'Mbeya', '130800'), +('3311', 'Morogoro', 'TZA', 'Morogoro', '117800'), +('3312', 'Arusha', 'TZA', 'Arusha', '102500'), +('3313', 'Moshi', 'TZA', 'Kilimanjaro', '96800'), +('3314', 'Tabora', 'TZA', 'Tabora', '92800'), +('3315', 'Křbenhavn', 'DNK', 'Křbenhavn', '495699'), +('3316', 'Ĺrhus', 'DNK', 'Ĺrhus', '284846'), +('3317', 'Odense', 'DNK', 'Fyn', '183912'), +('3318', 'Aalborg', 'DNK', 'Nordjylland', '161161'), +('3319', 'Frederiksberg', 'DNK', 'Frederiksberg', '90327'), +('3320', 'Bangkok', 'THA', 'Bangkok', '6320174'), +('3321', 'Nonthaburi', 'THA', 'Nonthaburi', '292100'), +('3322', 'Nakhon Ratchasima', 'THA', 'Nakhon Ratchasima', '181400'), +('3323', 'Chiang Mai', 'THA', 'Chiang Mai', '171100'), +('3324', 'Udon Thani', 'THA', 'Udon Thani', '158100'), +('3325', 'Hat Yai', 'THA', 'Songkhla', '148632'), +('3326', 'Khon Kaen', 'THA', 'Khon Kaen', '126500'), +('3327', 'Pak Kret', 'THA', 'Nonthaburi', '126055'), +('3328', 'Nakhon Sawan', 'THA', 'Nakhon Sawan', '123800'), +('3329', 'Ubon Ratchathani', 'THA', 'Ubon Ratchathani', '116300'), +('3330', 'Songkhla', 'THA', 'Songkhla', '94900'), +('3331', 'Nakhon Pathom', 'THA', 'Nakhon Pathom', '94100'), +('3332', 'Lomé', 'TGO', 'Maritime', '375000'), +('3333', 'Fakaofo', 'TKL', 'Fakaofo', '300'), +('3334', 'Nuku´alofa', 'TON', 'Tongatapu', '22400'), +('3335', 'Chaguanas', 'TTO', 'Caroni', '56601'), +('3336', 'Port-of-Spain', 'TTO', 'Port-of-Spain', '43396'), +('3337', 'N´Djaména', 'TCD', 'Chari-Baguirmi', '530965'), +('3338', 'Moundou', 'TCD', 'Logone Occidental', '99500'), +('3339', 'Praha', 'CZE', 'Hlavní mesto Praha', '1181126'), +('3340', 'Brno', 'CZE', 'Jizní Morava', '381862'), +('3341', 'Ostrava', 'CZE', 'Severní Morava', '320041'), +('3342', 'Plzen', 'CZE', 'Zapadní Cechy', '166759'), +('3343', 'Olomouc', 'CZE', 'Severní Morava', '102702'), +('3344', 'Liberec', 'CZE', 'Severní Cechy', '99155'), +('3345', 'Ceské Budejovice', 'CZE', 'Jizní Cechy', '98186'), +('3346', 'Hradec Králové', 'CZE', 'Východní Cechy', '98080'), +('3347', 'Ústí nad Labem', 'CZE', 'Severní Cechy', '95491'), +('3348', 'Pardubice', 'CZE', 'Východní Cechy', '91309'), +('3349', 'Tunis', 'TUN', 'Tunis', '690600'), +('3350', 'Sfax', 'TUN', 'Sfax', '257800'), +('3351', 'Ariana', 'TUN', 'Ariana', '197000'), +('3352', 'Ettadhamen', 'TUN', 'Ariana', '178600'), +('3353', 'Sousse', 'TUN', 'Sousse', '145900'), +('3354', 'Kairouan', 'TUN', 'Kairouan', '113100'), +('3355', 'Biserta', 'TUN', 'Biserta', '108900'), +('3356', 'Gabčs', 'TUN', 'Gabčs', '106600'), +('3357', 'Istanbul', 'TUR', 'Istanbul', '8787958'), +('3358', 'Ankara', 'TUR', 'Ankara', '3038159'), +('3359', 'Izmir', 'TUR', 'Izmir', '2130359'), +('3360', 'Adana', 'TUR', 'Adana', '1131198'), +('3361', 'Bursa', 'TUR', 'Bursa', '1095842'), +('3362', 'Gaziantep', 'TUR', 'Gaziantep', '789056'), +('3363', 'Konya', 'TUR', 'Konya', '628364'), +('3364', 'Mersin (Içel)', 'TUR', 'Içel', '587212'), +('3365', 'Antalya', 'TUR', 'Antalya', '564914'), +('3366', 'Diyarbakir', 'TUR', 'Diyarbakir', '479884'), +('3367', 'Kayseri', 'TUR', 'Kayseri', '475657'), +('3368', 'Eskisehir', 'TUR', 'Eskisehir', '470781'), +('3369', 'Sanliurfa', 'TUR', 'Sanliurfa', '405905'), +('3370', 'Samsun', 'TUR', 'Samsun', '339871'), +('3371', 'Malatya', 'TUR', 'Malatya', '330312'), +('3372', 'Gebze', 'TUR', 'Kocaeli', '264170'), +('3373', 'Denizli', 'TUR', 'Denizli', '253848'), +('3374', 'Sivas', 'TUR', 'Sivas', '246642'), +('3375', 'Erzurum', 'TUR', 'Erzurum', '246535'), +('3376', 'Tarsus', 'TUR', 'Adana', '246206'), +('3377', 'Kahramanmaras', 'TUR', 'Kahramanmaras', '245772'), +('3378', 'Elâzig', 'TUR', 'Elâzig', '228815'), +('3379', 'Van', 'TUR', 'Van', '219319'), +('3380', 'Sultanbeyli', 'TUR', 'Istanbul', '211068'), +('3381', 'Izmit (Kocaeli)', 'TUR', 'Kocaeli', '210068'), +('3382', 'Manisa', 'TUR', 'Manisa', '207148'), +('3383', 'Batman', 'TUR', 'Batman', '203793'), +('3384', 'Balikesir', 'TUR', 'Balikesir', '196382'), +('3385', 'Sakarya (Adapazari)', 'TUR', 'Sakarya', '190641'), +('3386', 'Iskenderun', 'TUR', 'Hatay', '153022'), +('3387', 'Osmaniye', 'TUR', 'Osmaniye', '146003'), +('3388', 'Çorum', 'TUR', 'Çorum', '145495'), +('3389', 'Kütahya', 'TUR', 'Kütahya', '144761'), +('3390', 'Hatay (Antakya)', 'TUR', 'Hatay', '143982'), +('3391', 'Kirikkale', 'TUR', 'Kirikkale', '142044'), +('3392', 'Adiyaman', 'TUR', 'Adiyaman', '141529'), +('3393', 'Trabzon', 'TUR', 'Trabzon', '138234'), +('3394', 'Ordu', 'TUR', 'Ordu', '133642'), +('3395', 'Aydin', 'TUR', 'Aydin', '128651'), +('3396', 'Usak', 'TUR', 'Usak', '128162'), +('3397', 'Edirne', 'TUR', 'Edirne', '123383'), +('3398', 'Çorlu', 'TUR', 'Tekirdag', '123300'), +('3399', 'Isparta', 'TUR', 'Isparta', '121911'), +('3400', 'Karabük', 'TUR', 'Karabük', '118285'), +('3401', 'Kilis', 'TUR', 'Kilis', '118245'), +('3402', 'Alanya', 'TUR', 'Antalya', '117300'), +('3403', 'Kiziltepe', 'TUR', 'Mardin', '112000'), +('3404', 'Zonguldak', 'TUR', 'Zonguldak', '111542'), +('3405', 'Siirt', 'TUR', 'Siirt', '107100'), +('3406', 'Viransehir', 'TUR', 'Sanliurfa', '106400'), +('3407', 'Tekirdag', 'TUR', 'Tekirdag', '106077'), +('3408', 'Karaman', 'TUR', 'Karaman', '104200'), +('3409', 'Afyon', 'TUR', 'Afyon', '103984'), +('3410', 'Aksaray', 'TUR', 'Aksaray', '102681'), +('3411', 'Ceyhan', 'TUR', 'Adana', '102412'), +('3412', 'Erzincan', 'TUR', 'Erzincan', '102304'), +('3413', 'Bismil', 'TUR', 'Diyarbakir', '101400'), +('3414', 'Nazilli', 'TUR', 'Aydin', '99900'), +('3415', 'Tokat', 'TUR', 'Tokat', '99500'), +('3416', 'Kars', 'TUR', 'Kars', '93000'), +('3417', 'Inegöl', 'TUR', 'Bursa', '90500'), +('3418', 'Bandirma', 'TUR', 'Balikesir', '90200'), +('3419', 'Ashgabat', 'TKM', 'Ahal', '540600'), +('3420', 'Chärjew', 'TKM', 'Lebap', '189200'), +('3421', 'Dashhowuz', 'TKM', 'Dashhowuz', '141800'), +('3422', 'Mary', 'TKM', 'Mary', '101000'), +('3423', 'Cockburn Town', 'TCA', 'Grand Turk', '4800'), +('3424', 'Funafuti', 'TUV', 'Funafuti', '4600'), +('3425', 'Kampala', 'UGA', 'Central', '890800'), +('3426', 'Kyiv', 'UKR', 'Kiova', '2624000'), +('3427', 'Harkova [Harkiv]', 'UKR', 'Harkova', '1500000'), +('3428', 'Dnipropetrovsk', 'UKR', 'Dnipropetrovsk', '1103000'), +('3429', 'Donetsk', 'UKR', 'Donetsk', '1050000'), +('3430', 'Odesa', 'UKR', 'Odesa', '1011000'), +('3431', 'Zaporizzja', 'UKR', 'Zaporizzja', '848000'), +('3432', 'Lviv', 'UKR', 'Lviv', '788000'), +('3433', 'Kryvyi Rig', 'UKR', 'Dnipropetrovsk', '703000'), +('3434', 'Mykolajiv', 'UKR', 'Mykolajiv', '508000'), +('3435', 'Mariupol', 'UKR', 'Donetsk', '490000'), +('3436', 'Lugansk', 'UKR', 'Lugansk', '469000'), +('3437', 'Vinnytsja', 'UKR', 'Vinnytsja', '391000'), +('3438', 'Makijivka', 'UKR', 'Donetsk', '384000'), +('3439', 'Herson', 'UKR', 'Herson', '353000'), +('3440', 'Sevastopol', 'UKR', 'Krim', '348000'), +('3441', 'Simferopol', 'UKR', 'Krim', '339000'), +('3442', 'Pultava [Poltava]', 'UKR', 'Pultava', '313000'), +('3443', 'Tšernigiv', 'UKR', 'Tšernigiv', '313000'), +('3444', 'Tšerkasy', 'UKR', 'Tšerkasy', '309000'), +('3445', 'Gorlivka', 'UKR', 'Donetsk', '299000'), +('3446', 'Zytomyr', 'UKR', 'Zytomyr', '297000'), +('3447', 'Sumy', 'UKR', 'Sumy', '294000'), +('3448', 'Dniprodzerzynsk', 'UKR', 'Dnipropetrovsk', '270000'), +('3449', 'Kirovograd', 'UKR', 'Kirovograd', '265000'), +('3450', 'Hmelnytskyi', 'UKR', 'Hmelnytskyi', '262000'), +('3451', 'Tšernivtsi', 'UKR', 'Tšernivtsi', '259000'), +('3452', 'Rivne', 'UKR', 'Rivne', '245000'), +('3453', 'Krementšuk', 'UKR', 'Pultava', '239000'), +('3454', 'Ivano-Frankivsk', 'UKR', 'Ivano-Frankivsk', '237000'), +('3455', 'Ternopil', 'UKR', 'Ternopil', '236000'), +('3456', 'Lutsk', 'UKR', 'Volynia', '217000'), +('3457', 'Bila Tserkva', 'UKR', 'Kiova', '215000'), +('3458', 'Kramatorsk', 'UKR', 'Donetsk', '186000'), +('3459', 'Melitopol', 'UKR', 'Zaporizzja', '169000'), +('3460', 'Kertš', 'UKR', 'Krim', '162000'), +('3461', 'Nikopol', 'UKR', 'Dnipropetrovsk', '149000'), +('3462', 'Berdjansk', 'UKR', 'Zaporizzja', '130000'), +('3463', 'Pavlograd', 'UKR', 'Dnipropetrovsk', '127000'), +('3464', 'Sjeverodonetsk', 'UKR', 'Lugansk', '127000'), +('3465', 'Slovjansk', 'UKR', 'Donetsk', '127000'), +('3466', 'Uzgorod', 'UKR', 'Taka-Karpatia', '127000'), +('3467', 'Altševsk', 'UKR', 'Lugansk', '119000'), +('3468', 'Lysytšansk', 'UKR', 'Lugansk', '116000'), +('3469', 'Jevpatorija', 'UKR', 'Krim', '112000'), +('3470', 'Kamjanets-Podilskyi', 'UKR', 'Hmelnytskyi', '109000'), +('3471', 'Jenakijeve', 'UKR', 'Donetsk', '105000'), +('3472', 'Krasnyi Lutš', 'UKR', 'Lugansk', '101000'), +('3473', 'Stahanov', 'UKR', 'Lugansk', '101000'), +('3474', 'Oleksandrija', 'UKR', 'Kirovograd', '99000'), +('3475', 'Konotop', 'UKR', 'Sumy', '96000'), +('3476', 'Kostjantynivka', 'UKR', 'Donetsk', '95000'), +('3477', 'Berdytšiv', 'UKR', 'Zytomyr', '90000'), +('3478', 'Izmajil', 'UKR', 'Odesa', '90000'), +('3479', 'Šostka', 'UKR', 'Sumy', '90000'), +('3480', 'Uman', 'UKR', 'Tšerkasy', '90000'), +('3481', 'Brovary', 'UKR', 'Kiova', '89000'), +('3482', 'Mukatševe', 'UKR', 'Taka-Karpatia', '89000'), +('3483', 'Budapest', 'HUN', 'Budapest', '1811552'), +('3484', 'Debrecen', 'HUN', 'Hajdú-Bihar', '203648'), +('3485', 'Miskolc', 'HUN', 'Borsod-Abaúj-Zemplén', '172357'), +('3486', 'Szeged', 'HUN', 'Csongrád', '158158'), +('3487', 'Pécs', 'HUN', 'Baranya', '157332'), +('3488', 'Györ', 'HUN', 'Györ-Moson-Sopron', '127119'), +('3489', 'Nyiregyháza', 'HUN', 'Szabolcs-Szatmár-Ber', '112419'), +('3490', 'Kecskemét', 'HUN', 'Bács-Kiskun', '105606'), +('3491', 'Székesfehérvár', 'HUN', 'Fejér', '105119'), +('3492', 'Montevideo', 'URY', 'Montevideo', '1236000'), +('3493', 'Nouméa', 'NCL', '–', '76293'), +('3494', 'Auckland', 'NZL', 'Auckland', '381800'), +('3495', 'Christchurch', 'NZL', 'Canterbury', '324200'), +('3496', 'Manukau', 'NZL', 'Auckland', '281800'), +('3497', 'North Shore', 'NZL', 'Auckland', '187700'), +('3498', 'Waitakere', 'NZL', 'Auckland', '170600'), +('3499', 'Wellington', 'NZL', 'Wellington', '166700'), +('3500', 'Dunedin', 'NZL', 'Dunedin', '119600'), +('3501', 'Hamilton', 'NZL', 'Hamilton', '117100'), +('3502', 'Lower Hutt', 'NZL', 'Wellington', '98100'), +('3503', 'Toskent', 'UZB', 'Toskent Shahri', '2117500'), +('3504', 'Namangan', 'UZB', 'Namangan', '370500'), +('3505', 'Samarkand', 'UZB', 'Samarkand', '361800'), +('3506', 'Andijon', 'UZB', 'Andijon', '318600'), +('3507', 'Buhoro', 'UZB', 'Buhoro', '237100'), +('3508', 'Karsi', 'UZB', 'Qashqadaryo', '194100'), +('3509', 'Nukus', 'UZB', 'Karakalpakistan', '194100'), +('3510', 'Kükon', 'UZB', 'Fargona', '190100'), +('3511', 'Fargona', 'UZB', 'Fargona', '180500'), +('3512', 'Circik', 'UZB', 'Toskent', '146400'), +('3513', 'Margilon', 'UZB', 'Fargona', '140800'), +('3514', 'Ürgenc', 'UZB', 'Khorazm', '138900'), +('3515', 'Angren', 'UZB', 'Toskent', '128000'), +('3516', 'Cizah', 'UZB', 'Cizah', '124800'), +('3517', 'Navoi', 'UZB', 'Navoi', '116300'), +('3518', 'Olmalik', 'UZB', 'Toskent', '114900'), +('3519', 'Termiz', 'UZB', 'Surkhondaryo', '109500'), +('3520', 'Minsk', 'BLR', 'Horad Minsk', '1674000'), +('3521', 'Gomel', 'BLR', 'Gomel', '475000'), +('3522', 'Mogiljov', 'BLR', 'Mogiljov', '356000'), +('3523', 'Vitebsk', 'BLR', 'Vitebsk', '340000'), +('3524', 'Grodno', 'BLR', 'Grodno', '302000'), +('3525', 'Brest', 'BLR', 'Brest', '286000'), +('3526', 'Bobruisk', 'BLR', 'Mogiljov', '221000'), +('3527', 'Baranovitši', 'BLR', 'Brest', '167000'), +('3528', 'Borisov', 'BLR', 'Minsk', '151000'), +('3529', 'Pinsk', 'BLR', 'Brest', '130000'), +('3530', 'Orša', 'BLR', 'Vitebsk', '124000'), +('3531', 'Mozyr', 'BLR', 'Gomel', '110000'), +('3532', 'Novopolotsk', 'BLR', 'Vitebsk', '106000'), +('3533', 'Lida', 'BLR', 'Grodno', '101000'), +('3534', 'Soligorsk', 'BLR', 'Minsk', '101000'), +('3535', 'Molodetšno', 'BLR', 'Minsk', '97000'), +('3536', 'Mata-Utu', 'WLF', 'Wallis', '1137'), +('3537', 'Port-Vila', 'VUT', 'Shefa', '33700'), +('3538', 'Cittŕ del Vaticano', 'VAT', '–', '455'), +('3539', 'Caracas', 'VEN', 'Distrito Federal', '1975294'), +('3540', 'Maracaíbo', 'VEN', 'Zulia', '1304776'), +('3541', 'Barquisimeto', 'VEN', 'Lara', '877239'), +('3542', 'Valencia', 'VEN', 'Carabobo', '794246'), +('3543', 'Ciudad Guayana', 'VEN', 'Bolívar', '663713'), +('3544', 'Petare', 'VEN', 'Miranda', '488868'), +('3545', 'Maracay', 'VEN', 'Aragua', '444443'), +('3546', 'Barcelona', 'VEN', 'Anzoátegui', '322267'), +('3547', 'Maturín', 'VEN', 'Monagas', '319726'), +('3548', 'San Cristóbal', 'VEN', 'Táchira', '319373'), +('3549', 'Ciudad Bolívar', 'VEN', 'Bolívar', '301107'), +('3550', 'Cumaná', 'VEN', 'Sucre', '293105'), +('3551', 'Mérida', 'VEN', 'Mérida', '224887'), +('3552', 'Cabimas', 'VEN', 'Zulia', '221329'), +('3553', 'Barinas', 'VEN', 'Barinas', '217831'), +('3554', 'Turmero', 'VEN', 'Aragua', '217499'), +('3555', 'Baruta', 'VEN', 'Miranda', '207290'), +('3556', 'Puerto Cabello', 'VEN', 'Carabobo', '187722'), +('3557', 'Santa Ana de Coro', 'VEN', 'Falcón', '185766'), +('3558', 'Los Teques', 'VEN', 'Miranda', '178784'), +('3559', 'Punto Fijo', 'VEN', 'Falcón', '167215'), +('3560', 'Guarenas', 'VEN', 'Miranda', '165889'), +('3561', 'Acarigua', 'VEN', 'Portuguesa', '158954'), +('3562', 'Puerto La Cruz', 'VEN', 'Anzoátegui', '155700'), +('3563', 'Ciudad Losada', 'VEN', '-', '134501'), +('3564', 'Guacara', 'VEN', 'Carabobo', '131334'), +('3565', 'Valera', 'VEN', 'Trujillo', '130281'), +('3566', 'Guanare', 'VEN', 'Portuguesa', '125621'), +('3567', 'Carúpano', 'VEN', 'Sucre', '119639'), +('3568', 'Catia La Mar', 'VEN', 'Distrito Federal', '117012'), +('3569', 'El Tigre', 'VEN', 'Anzoátegui', '116256'), +('3570', 'Guatire', 'VEN', 'Miranda', '109121'), +('3571', 'Calabozo', 'VEN', 'Guárico', '107146'), +('3572', 'Pozuelos', 'VEN', 'Anzoátegui', '105690'), +('3573', 'Ciudad Ojeda', 'VEN', 'Zulia', '99354'), +('3574', 'Ocumare del Tuy', 'VEN', 'Miranda', '97168'), +('3575', 'Valle de la Pascua', 'VEN', 'Guárico', '95927'), +('3576', 'Araure', 'VEN', 'Portuguesa', '94269'), +('3577', 'San Fernando de Apure', 'VEN', 'Apure', '93809'), +('3578', 'San Felipe', 'VEN', 'Yaracuy', '90940'), +('3579', 'El Limón', 'VEN', 'Aragua', '90000'), +('3580', 'Moscow', 'RUS', 'Moscow (City)', '8389200'), +('3581', 'St Petersburg', 'RUS', 'Pietari', '4694000'), +('3582', 'Novosibirsk', 'RUS', 'Novosibirsk', '1398800'), +('3583', 'Nizni Novgorod', 'RUS', 'Nizni Novgorod', '1357000'), +('3584', 'Jekaterinburg', 'RUS', 'Sverdlovsk', '1266300'), +('3585', 'Samara', 'RUS', 'Samara', '1156100'), +('3586', 'Omsk', 'RUS', 'Omsk', '1148900'), +('3587', 'Kazan', 'RUS', 'Tatarstan', '1101000'), +('3588', 'Ufa', 'RUS', 'Baškortostan', '1091200'), +('3589', 'Tšeljabinsk', 'RUS', 'Tšeljabinsk', '1083200'), +('3590', 'Rostov-na-Donu', 'RUS', 'Rostov-na-Donu', '1012700'), +('3591', 'Perm', 'RUS', 'Perm', '1009700'), +('3592', 'Volgograd', 'RUS', 'Volgograd', '993400'), +('3593', 'Voronez', 'RUS', 'Voronez', '907700'), +('3594', 'Krasnojarsk', 'RUS', 'Krasnojarsk', '875500'), +('3595', 'Saratov', 'RUS', 'Saratov', '874000'), +('3596', 'Toljatti', 'RUS', 'Samara', '722900'), +('3597', 'Uljanovsk', 'RUS', 'Uljanovsk', '667400'), +('3598', 'Izevsk', 'RUS', 'Udmurtia', '652800'), +('3599', 'Krasnodar', 'RUS', 'Krasnodar', '639000'), +('3600', 'Jaroslavl', 'RUS', 'Jaroslavl', '616700'), +('3601', 'Habarovsk', 'RUS', 'Habarovsk', '609400'), +('3602', 'Vladivostok', 'RUS', 'Primorje', '606200'), +('3603', 'Irkutsk', 'RUS', 'Irkutsk', '593700'), +('3604', 'Barnaul', 'RUS', 'Altai', '580100'), +('3605', 'Novokuznetsk', 'RUS', 'Kemerovo', '561600'), +('3606', 'Penza', 'RUS', 'Penza', '532200'), +('3607', 'Rjazan', 'RUS', 'Rjazan', '529900'), +('3608', 'Orenburg', 'RUS', 'Orenburg', '523600'), +('3609', 'Lipetsk', 'RUS', 'Lipetsk', '521000'), +('3610', 'Nabereznyje Tšelny', 'RUS', 'Tatarstan', '514700'), +('3611', 'Tula', 'RUS', 'Tula', '506100'), +('3612', 'Tjumen', 'RUS', 'Tjumen', '503400'), +('3613', 'Kemerovo', 'RUS', 'Kemerovo', '492700'), +('3614', 'Astrahan', 'RUS', 'Astrahan', '486100'), +('3615', 'Tomsk', 'RUS', 'Tomsk', '482100'), +('3616', 'Kirov', 'RUS', 'Kirov', '466200'), +('3617', 'Ivanovo', 'RUS', 'Ivanovo', '459200'), +('3618', 'Tšeboksary', 'RUS', 'Tšuvassia', '459200'), +('3619', 'Brjansk', 'RUS', 'Brjansk', '457400'), +('3620', 'Tver', 'RUS', 'Tver', '454900'), +('3621', 'Kursk', 'RUS', 'Kursk', '443500'), +('3622', 'Magnitogorsk', 'RUS', 'Tšeljabinsk', '427900'), +('3623', 'Kaliningrad', 'RUS', 'Kaliningrad', '424400'), +('3624', 'Nizni Tagil', 'RUS', 'Sverdlovsk', '390900'), +('3625', 'Murmansk', 'RUS', 'Murmansk', '376300'), +('3626', 'Ulan-Ude', 'RUS', 'Burjatia', '370400'), +('3627', 'Kurgan', 'RUS', 'Kurgan', '364700'), +('3628', 'Arkangeli', 'RUS', 'Arkangeli', '361800'), +('3629', 'Sotši', 'RUS', 'Krasnodar', '358600'), +('3630', 'Smolensk', 'RUS', 'Smolensk', '353400'), +('3631', 'Orjol', 'RUS', 'Orjol', '344500'), +('3632', 'Stavropol', 'RUS', 'Stavropol', '343300'), +('3633', 'Belgorod', 'RUS', 'Belgorod', '342000'), +('3634', 'Kaluga', 'RUS', 'Kaluga', '339300'), +('3635', 'Vladimir', 'RUS', 'Vladimir', '337100'), +('3636', 'Mahatškala', 'RUS', 'Dagestan', '332800'), +('3637', 'Tšerepovets', 'RUS', 'Vologda', '324400'), +('3638', 'Saransk', 'RUS', 'Mordva', '314800'), +('3639', 'Tambov', 'RUS', 'Tambov', '312000'), +('3640', 'Vladikavkaz', 'RUS', 'North Ossetia-Alania', '310100'), +('3641', 'Tšita', 'RUS', 'Tšita', '309900'), +('3642', 'Vologda', 'RUS', 'Vologda', '302500'), +('3643', 'Veliki Novgorod', 'RUS', 'Novgorod', '299500'), +('3644', 'Komsomolsk-na-Amure', 'RUS', 'Habarovsk', '291600'), +('3645', 'Kostroma', 'RUS', 'Kostroma', '288100'), +('3646', 'Volzski', 'RUS', 'Volgograd', '286900'), +('3647', 'Taganrog', 'RUS', 'Rostov-na-Donu', '284400'), +('3648', 'Petroskoi', 'RUS', 'Karjala', '282100'), +('3649', 'Bratsk', 'RUS', 'Irkutsk', '277600'), +('3650', 'Dzerzinsk', 'RUS', 'Nizni Novgorod', '277100'), +('3651', 'Surgut', 'RUS', 'Hanti-Mansia', '274900'), +('3652', 'Orsk', 'RUS', 'Orenburg', '273900'), +('3653', 'Sterlitamak', 'RUS', 'Baškortostan', '265200'), +('3654', 'Angarsk', 'RUS', 'Irkutsk', '264700'), +('3655', 'Joškar-Ola', 'RUS', 'Marinmaa', '249200'), +('3656', 'Rybinsk', 'RUS', 'Jaroslavl', '239600'), +('3657', 'Prokopjevsk', 'RUS', 'Kemerovo', '237300'), +('3658', 'Niznevartovsk', 'RUS', 'Hanti-Mansia', '233900'), +('3659', 'Naltšik', 'RUS', 'Kabardi-Balkaria', '233400'), +('3660', 'Syktyvkar', 'RUS', 'Komi', '229700'), +('3661', 'Severodvinsk', 'RUS', 'Arkangeli', '229300'), +('3662', 'Bijsk', 'RUS', 'Altai', '225000'), +('3663', 'Niznekamsk', 'RUS', 'Tatarstan', '223400'), +('3664', 'Blagoveštšensk', 'RUS', 'Amur', '222000'), +('3665', 'Šahty', 'RUS', 'Rostov-na-Donu', '221800'), +('3666', 'Staryi Oskol', 'RUS', 'Belgorod', '213800'), +('3667', 'Zelenograd', 'RUS', 'Moscow (City)', '207100'), +('3668', 'Balakovo', 'RUS', 'Saratov', '206000'), +('3669', 'Novorossijsk', 'RUS', 'Krasnodar', '203300'), +('3670', 'Pihkova', 'RUS', 'Pihkova', '201500'), +('3671', 'Zlatoust', 'RUS', 'Tšeljabinsk', '196900'), +('3672', 'Jakutsk', 'RUS', 'Saha (Jakutia)', '195400'), +('3673', 'Podolsk', 'RUS', 'Moskova', '194300'), +('3674', 'Petropavlovsk-Kamtšatski', 'RUS', 'Kamtšatka', '194100'), +('3675', 'Kamensk-Uralski', 'RUS', 'Sverdlovsk', '190600'), +('3676', 'Engels', 'RUS', 'Saratov', '189000'), +('3677', 'Syzran', 'RUS', 'Samara', '186900'), +('3678', 'Grozny', 'RUS', 'Tšetšenia', '186000'), +('3679', 'Novotšerkassk', 'RUS', 'Rostov-na-Donu', '184400'), +('3680', 'Berezniki', 'RUS', 'Perm', '181900'), +('3681', 'Juzno-Sahalinsk', 'RUS', 'Sahalin', '179200'), +('3682', 'Volgodonsk', 'RUS', 'Rostov-na-Donu', '178200'), +('3683', 'Abakan', 'RUS', 'Hakassia', '169200'), +('3684', 'Maikop', 'RUS', 'Adygea', '167300'), +('3685', 'Miass', 'RUS', 'Tšeljabinsk', '166200'), +('3686', 'Armavir', 'RUS', 'Krasnodar', '164900'), +('3687', 'Ljubertsy', 'RUS', 'Moskova', '163900'), +('3688', 'Rubtsovsk', 'RUS', 'Altai', '162600'), +('3689', 'Kovrov', 'RUS', 'Vladimir', '159900'), +('3690', 'Nahodka', 'RUS', 'Primorje', '157700'), +('3691', 'Ussurijsk', 'RUS', 'Primorje', '157300'), +('3692', 'Salavat', 'RUS', 'Baškortostan', '156800'), +('3693', 'Mytištši', 'RUS', 'Moskova', '155700'), +('3694', 'Kolomna', 'RUS', 'Moskova', '150700'), +('3695', 'Elektrostal', 'RUS', 'Moskova', '147000'), +('3696', 'Murom', 'RUS', 'Vladimir', '142400'), +('3697', 'Kolpino', 'RUS', 'Pietari', '141200'), +('3698', 'Norilsk', 'RUS', 'Krasnojarsk', '140800'), +('3699', 'Almetjevsk', 'RUS', 'Tatarstan', '140700'), +('3700', 'Novomoskovsk', 'RUS', 'Tula', '138100'), +('3701', 'Dimitrovgrad', 'RUS', 'Uljanovsk', '137000'), +('3702', 'Pervouralsk', 'RUS', 'Sverdlovsk', '136100'), +('3703', 'Himki', 'RUS', 'Moskova', '133700'), +('3704', 'Balašiha', 'RUS', 'Moskova', '132900'), +('3705', 'Nevinnomyssk', 'RUS', 'Stavropol', '132600'), +('3706', 'Pjatigorsk', 'RUS', 'Stavropol', '132500'), +('3707', 'Korolev', 'RUS', 'Moskova', '132400'), +('3708', 'Serpuhov', 'RUS', 'Moskova', '132000'), +('3709', 'Odintsovo', 'RUS', 'Moskova', '127400'), +('3710', 'Orehovo-Zujevo', 'RUS', 'Moskova', '124900'), +('3711', 'Kamyšin', 'RUS', 'Volgograd', '124600'), +('3712', 'Novotšeboksarsk', 'RUS', 'Tšuvassia', '123400'), +('3713', 'Tšerkessk', 'RUS', 'Karatšai-Tšerkessia', '121700'), +('3714', 'Atšinsk', 'RUS', 'Krasnojarsk', '121600'), +('3715', 'Magadan', 'RUS', 'Magadan', '121000'), +('3716', 'Mitšurinsk', 'RUS', 'Tambov', '120700'), +('3717', 'Kislovodsk', 'RUS', 'Stavropol', '120400'), +('3718', 'Jelets', 'RUS', 'Lipetsk', '119400'), +('3719', 'Seversk', 'RUS', 'Tomsk', '118600'), +('3720', 'Noginsk', 'RUS', 'Moskova', '117200'), +('3721', 'Velikije Luki', 'RUS', 'Pihkova', '116300'), +('3722', 'Novokuibyševsk', 'RUS', 'Samara', '116200'), +('3723', 'Neftekamsk', 'RUS', 'Baškortostan', '115700'), +('3724', 'Leninsk-Kuznetski', 'RUS', 'Kemerovo', '113800'), +('3725', 'Oktjabrski', 'RUS', 'Baškortostan', '111500'), +('3726', 'Sergijev Posad', 'RUS', 'Moskova', '111100'), +('3727', 'Arzamas', 'RUS', 'Nizni Novgorod', '110700'), +('3728', 'Kiseljovsk', 'RUS', 'Kemerovo', '110000'), +('3729', 'Novotroitsk', 'RUS', 'Orenburg', '109600'), +('3730', 'Obninsk', 'RUS', 'Kaluga', '108300'), +('3731', 'Kansk', 'RUS', 'Krasnojarsk', '107400'), +('3732', 'Glazov', 'RUS', 'Udmurtia', '106300'), +('3733', 'Solikamsk', 'RUS', 'Perm', '106000'), +('3734', 'Sarapul', 'RUS', 'Udmurtia', '105700'), +('3735', 'Ust-Ilimsk', 'RUS', 'Irkutsk', '105200'), +('3736', 'Štšolkovo', 'RUS', 'Moskova', '104900'), +('3737', 'Mezduretšensk', 'RUS', 'Kemerovo', '104400'), +('3738', 'Usolje-Sibirskoje', 'RUS', 'Irkutsk', '103500'), +('3739', 'Elista', 'RUS', 'Kalmykia', '103300'), +('3740', 'Novošahtinsk', 'RUS', 'Rostov-na-Donu', '101900'), +('3741', 'Votkinsk', 'RUS', 'Udmurtia', '101700'), +('3742', 'Kyzyl', 'RUS', 'Tyva', '101100'), +('3743', 'Serov', 'RUS', 'Sverdlovsk', '100400'), +('3744', 'Zelenodolsk', 'RUS', 'Tatarstan', '100200'), +('3745', 'Zeleznodoroznyi', 'RUS', 'Moskova', '100100'), +('3746', 'Kinešma', 'RUS', 'Ivanovo', '100000'), +('3747', 'Kuznetsk', 'RUS', 'Penza', '98200'), +('3748', 'Uhta', 'RUS', 'Komi', '98000'), +('3749', 'Jessentuki', 'RUS', 'Stavropol', '97900'), +('3750', 'Tobolsk', 'RUS', 'Tjumen', '97600'), +('3751', 'Neftejugansk', 'RUS', 'Hanti-Mansia', '97400'), +('3752', 'Bataisk', 'RUS', 'Rostov-na-Donu', '97300'), +('3753', 'Nojabrsk', 'RUS', 'Yamalin Nenetsia', '97300'), +('3754', 'Balašov', 'RUS', 'Saratov', '97100'), +('3755', 'Zeleznogorsk', 'RUS', 'Kursk', '96900'), +('3756', 'Zukovski', 'RUS', 'Moskova', '96500'), +('3757', 'Anzero-Sudzensk', 'RUS', 'Kemerovo', '96100'), +('3758', 'Bugulma', 'RUS', 'Tatarstan', '94100'), +('3759', 'Zeleznogorsk', 'RUS', 'Krasnojarsk', '94000'), +('3760', 'Novouralsk', 'RUS', 'Sverdlovsk', '93300'), +('3761', 'Puškin', 'RUS', 'Pietari', '92900'), +('3762', 'Vorkuta', 'RUS', 'Komi', '92600'), +('3763', 'Derbent', 'RUS', 'Dagestan', '92300'), +('3764', 'Kirovo-Tšepetsk', 'RUS', 'Kirov', '91600'), +('3765', 'Krasnogorsk', 'RUS', 'Moskova', '91000'), +('3766', 'Klin', 'RUS', 'Moskova', '90000'), +('3767', 'Tšaikovski', 'RUS', 'Perm', '90000'), +('3768', 'Novyi Urengoi', 'RUS', 'Yamalin Nenetsia', '89800'), +('3769', 'Ho Chi Minh City', 'VNM', 'Ho Chi Minh City', '3980000'), +('3770', 'Hanoi', 'VNM', 'Hanoi', '1410000'), +('3771', 'Haiphong', 'VNM', 'Haiphong', '783133'), +('3772', 'Da Nang', 'VNM', 'Quang Nam-Da Nang', '382674'), +('3773', 'Bięn Hoa', 'VNM', 'Dong Nai', '282095'), +('3774', 'Nha Trang', 'VNM', 'Khanh Hoa', '221331'), +('3775', 'Hue', 'VNM', 'Thua Thien-Hue', '219149'), +('3776', 'Can Tho', 'VNM', 'Can Tho', '215587'), +('3777', 'Cam Pha', 'VNM', 'Quang Binh', '209086'), +('3778', 'Nam Dinh', 'VNM', 'Nam Ha', '171699'), +('3779', 'Quy Nhon', 'VNM', 'Binh Dinh', '163385'), +('3780', 'Vung Tau', 'VNM', 'Ba Ria-Vung Tau', '145145'), +('3781', 'Rach Gia', 'VNM', 'Kien Giang', '141132'), +('3782', 'Long Xuyen', 'VNM', 'An Giang', '132681'), +('3783', 'Thai Nguyen', 'VNM', 'Bac Thai', '127643'), +('3784', 'Hong Gai', 'VNM', 'Quang Ninh', '127484'), +('3785', 'Phan Thięt', 'VNM', 'Binh Thuan', '114236'), +('3786', 'Cam Ranh', 'VNM', 'Khanh Hoa', '114041'), +('3787', 'Vinh', 'VNM', 'Nghe An', '112455'), +('3788', 'My Tho', 'VNM', 'Tien Giang', '108404'), +('3789', 'Da Lat', 'VNM', 'Lam Dong', '106409'), +('3790', 'Buon Ma Thuot', 'VNM', 'Dac Lac', '97044'), +('3791', 'Tallinn', 'EST', 'Harjumaa', '403981'), +('3792', 'Tartu', 'EST', 'Tartumaa', '101246'), +('3793', 'New York', 'USA', 'New York', '8008278'), +('3794', 'Los Angeles', 'USA', 'California', '3694820'), +('3795', 'Chicago', 'USA', 'Illinois', '2896016'), +('3796', 'Houston', 'USA', 'Texas', '1953631'), +('3797', 'Philadelphia', 'USA', 'Pennsylvania', '1517550'), +('3798', 'Phoenix', 'USA', 'Arizona', '1321045'), +('3799', 'San Diego', 'USA', 'California', '1223400'), +('3800', 'Dallas', 'USA', 'Texas', '1188580'), +('3801', 'San Antonio', 'USA', 'Texas', '1144646'), +('3802', 'Detroit', 'USA', 'Michigan', '951270'), +('3803', 'San Jose', 'USA', 'California', '894943'), +('3804', 'Indianapolis', 'USA', 'Indiana', '791926'), +('3805', 'San Francisco', 'USA', 'California', '776733'), +('3806', 'Jacksonville', 'USA', 'Florida', '735167'), +('3807', 'Columbus', 'USA', 'Ohio', '711470'), +('3808', 'Austin', 'USA', 'Texas', '656562'), +('3809', 'Baltimore', 'USA', 'Maryland', '651154'), +('3810', 'Memphis', 'USA', 'Tennessee', '650100'), +('3811', 'Milwaukee', 'USA', 'Wisconsin', '596974'), +('3812', 'Boston', 'USA', 'Massachusetts', '589141'), +('3813', 'Washington', 'USA', 'District of Columbia', '572059'), +('3814', 'Nashville-Davidson', 'USA', 'Tennessee', '569891'), +('3815', 'El Paso', 'USA', 'Texas', '563662'), +('3816', 'Seattle', 'USA', 'Washington', '563374'), +('3817', 'Denver', 'USA', 'Colorado', '554636'), +('3818', 'Charlotte', 'USA', 'North Carolina', '540828'), +('3819', 'Fort Worth', 'USA', 'Texas', '534694'), +('3820', 'Portland', 'USA', 'Oregon', '529121'), +('3821', 'Oklahoma City', 'USA', 'Oklahoma', '506132'), +('3822', 'Tucson', 'USA', 'Arizona', '486699'), +('3823', 'New Orleans', 'USA', 'Louisiana', '484674'), +('3824', 'Las Vegas', 'USA', 'Nevada', '478434'), +('3825', 'Cleveland', 'USA', 'Ohio', '478403'), +('3826', 'Long Beach', 'USA', 'California', '461522'), +('3827', 'Albuquerque', 'USA', 'New Mexico', '448607'), +('3828', 'Kansas City', 'USA', 'Missouri', '441545'), +('3829', 'Fresno', 'USA', 'California', '427652'), +('3830', 'Virginia Beach', 'USA', 'Virginia', '425257'), +('3831', 'Atlanta', 'USA', 'Georgia', '416474'), +('3832', 'Sacramento', 'USA', 'California', '407018'), +('3833', 'Oakland', 'USA', 'California', '399484'), +('3834', 'Mesa', 'USA', 'Arizona', '396375'), +('3835', 'Tulsa', 'USA', 'Oklahoma', '393049'), +('3836', 'Omaha', 'USA', 'Nebraska', '390007'), +('3837', 'Minneapolis', 'USA', 'Minnesota', '382618'), +('3838', 'Honolulu', 'USA', 'Hawaii', '371657'), +('3839', 'Miami', 'USA', 'Florida', '362470'), +('3840', 'Colorado Springs', 'USA', 'Colorado', '360890'), +('3841', 'Saint Louis', 'USA', 'Missouri', '348189'), +('3842', 'Wichita', 'USA', 'Kansas', '344284'), +('3843', 'Santa Ana', 'USA', 'California', '337977'), +('3844', 'Pittsburgh', 'USA', 'Pennsylvania', '334563'), +('3845', 'Arlington', 'USA', 'Texas', '332969'), +('3846', 'Cincinnati', 'USA', 'Ohio', '331285'), +('3847', 'Anaheim', 'USA', 'California', '328014'), +('3848', 'Toledo', 'USA', 'Ohio', '313619'), +('3849', 'Tampa', 'USA', 'Florida', '303447'), +('3850', 'Buffalo', 'USA', 'New York', '292648'), +('3851', 'Saint Paul', 'USA', 'Minnesota', '287151'), +('3852', 'Corpus Christi', 'USA', 'Texas', '277454'), +('3853', 'Aurora', 'USA', 'Colorado', '276393'), +('3854', 'Raleigh', 'USA', 'North Carolina', '276093'), +('3855', 'Newark', 'USA', 'New Jersey', '273546'), +('3856', 'Lexington-Fayette', 'USA', 'Kentucky', '260512'), +('3857', 'Anchorage', 'USA', 'Alaska', '260283'), +('3858', 'Louisville', 'USA', 'Kentucky', '256231'), +('3859', 'Riverside', 'USA', 'California', '255166'), +('3860', 'Saint Petersburg', 'USA', 'Florida', '248232'), +('3861', 'Bakersfield', 'USA', 'California', '247057'), +('3862', 'Stockton', 'USA', 'California', '243771'), +('3863', 'Birmingham', 'USA', 'Alabama', '242820'), +('3864', 'Jersey City', 'USA', 'New Jersey', '240055'), +('3865', 'Norfolk', 'USA', 'Virginia', '234403'), +('3866', 'Baton Rouge', 'USA', 'Louisiana', '227818'), +('3867', 'Hialeah', 'USA', 'Florida', '226419'), +('3868', 'Lincoln', 'USA', 'Nebraska', '225581'), +('3869', 'Greensboro', 'USA', 'North Carolina', '223891'), +('3870', 'Plano', 'USA', 'Texas', '222030'), +('3871', 'Rochester', 'USA', 'New York', '219773'), +('3872', 'Glendale', 'USA', 'Arizona', '218812'), +('3873', 'Akron', 'USA', 'Ohio', '217074'), +('3874', 'Garland', 'USA', 'Texas', '215768'), +('3875', 'Madison', 'USA', 'Wisconsin', '208054'), +('3876', 'Fort Wayne', 'USA', 'Indiana', '205727'), +('3877', 'Fremont', 'USA', 'California', '203413'), +('3878', 'Scottsdale', 'USA', 'Arizona', '202705'), +('3879', 'Montgomery', 'USA', 'Alabama', '201568'), +('3880', 'Shreveport', 'USA', 'Louisiana', '200145'), +('3881', 'Augusta-Richmond County', 'USA', 'Georgia', '199775'), +('3882', 'Lubbock', 'USA', 'Texas', '199564'), +('3883', 'Chesapeake', 'USA', 'Virginia', '199184'), +('3884', 'Mobile', 'USA', 'Alabama', '198915'), +('3885', 'Des Moines', 'USA', 'Iowa', '198682'), +('3886', 'Grand Rapids', 'USA', 'Michigan', '197800'), +('3887', 'Richmond', 'USA', 'Virginia', '197790'), +('3888', 'Yonkers', 'USA', 'New York', '196086'), +('3889', 'Spokane', 'USA', 'Washington', '195629'), +('3890', 'Glendale', 'USA', 'California', '194973'), +('3891', 'Tacoma', 'USA', 'Washington', '193556'), +('3892', 'Irving', 'USA', 'Texas', '191615'), +('3893', 'Huntington Beach', 'USA', 'California', '189594'), +('3894', 'Modesto', 'USA', 'California', '188856'), +('3895', 'Durham', 'USA', 'North Carolina', '187035'), +('3896', 'Columbus', 'USA', 'Georgia', '186291'), +('3897', 'Orlando', 'USA', 'Florida', '185951'), +('3898', 'Boise City', 'USA', 'Idaho', '185787'), +('3899', 'Winston-Salem', 'USA', 'North Carolina', '185776'), +('3900', 'San Bernardino', 'USA', 'California', '185401'), +('3901', 'Jackson', 'USA', 'Mississippi', '184256'), +('3902', 'Little Rock', 'USA', 'Arkansas', '183133'), +('3903', 'Salt Lake City', 'USA', 'Utah', '181743'), +('3904', 'Reno', 'USA', 'Nevada', '180480'), +('3905', 'Newport News', 'USA', 'Virginia', '180150'), +('3906', 'Chandler', 'USA', 'Arizona', '176581'), +('3907', 'Laredo', 'USA', 'Texas', '176576'), +('3908', 'Henderson', 'USA', 'Nevada', '175381'), +('3909', 'Arlington', 'USA', 'Virginia', '174838'), +('3910', 'Knoxville', 'USA', 'Tennessee', '173890'), +('3911', 'Amarillo', 'USA', 'Texas', '173627'), +('3912', 'Providence', 'USA', 'Rhode Island', '173618'), +('3913', 'Chula Vista', 'USA', 'California', '173556'), +('3914', 'Worcester', 'USA', 'Massachusetts', '172648'), +('3915', 'Oxnard', 'USA', 'California', '170358'), +('3916', 'Dayton', 'USA', 'Ohio', '166179'), +('3917', 'Garden Grove', 'USA', 'California', '165196'), +('3918', 'Oceanside', 'USA', 'California', '161029'), +('3919', 'Tempe', 'USA', 'Arizona', '158625'), +('3920', 'Huntsville', 'USA', 'Alabama', '158216'), +('3921', 'Ontario', 'USA', 'California', '158007'), +('3922', 'Chattanooga', 'USA', 'Tennessee', '155554'), +('3923', 'Fort Lauderdale', 'USA', 'Florida', '152397'), +('3924', 'Springfield', 'USA', 'Massachusetts', '152082'), +('3925', 'Springfield', 'USA', 'Missouri', '151580'), +('3926', 'Santa Clarita', 'USA', 'California', '151088'), +('3927', 'Salinas', 'USA', 'California', '151060'), +('3928', 'Tallahassee', 'USA', 'Florida', '150624'), +('3929', 'Rockford', 'USA', 'Illinois', '150115'), +('3930', 'Pomona', 'USA', 'California', '149473'), +('3931', 'Metairie', 'USA', 'Louisiana', '149428'), +('3932', 'Paterson', 'USA', 'New Jersey', '149222'), +('3933', 'Overland Park', 'USA', 'Kansas', '149080'), +('3934', 'Santa Rosa', 'USA', 'California', '147595'), +('3935', 'Syracuse', 'USA', 'New York', '147306'), +('3936', 'Kansas City', 'USA', 'Kansas', '146866'), +('3937', 'Hampton', 'USA', 'Virginia', '146437'), +('3938', 'Lakewood', 'USA', 'Colorado', '144126'), +('3939', 'Vancouver', 'USA', 'Washington', '143560'), +('3940', 'Irvine', 'USA', 'California', '143072'), +('3941', 'Aurora', 'USA', 'Illinois', '142990'), +('3942', 'Moreno Valley', 'USA', 'California', '142381'), +('3943', 'Pasadena', 'USA', 'California', '141674'), +('3944', 'Hayward', 'USA', 'California', '140030'), +('3945', 'Brownsville', 'USA', 'Texas', '139722'), +('3946', 'Bridgeport', 'USA', 'Connecticut', '139529'), +('3947', 'Hollywood', 'USA', 'Florida', '139357'), +('3948', 'Warren', 'USA', 'Michigan', '138247'), +('3949', 'Torrance', 'USA', 'California', '137946'), +('3950', 'Eugene', 'USA', 'Oregon', '137893'), +('3951', 'Pembroke Pines', 'USA', 'Florida', '137427'), +('3952', 'Salem', 'USA', 'Oregon', '136924'), +('3953', 'Pasadena', 'USA', 'Texas', '133936'), +('3954', 'Escondido', 'USA', 'California', '133559'), +('3955', 'Sunnyvale', 'USA', 'California', '131760'), +('3956', 'Savannah', 'USA', 'Georgia', '131510'), +('3957', 'Fontana', 'USA', 'California', '128929'), +('3958', 'Orange', 'USA', 'California', '128821'), +('3959', 'Naperville', 'USA', 'Illinois', '128358'), +('3960', 'Alexandria', 'USA', 'Virginia', '128283'), +('3961', 'Rancho Cucamonga', 'USA', 'California', '127743'), +('3962', 'Grand Prairie', 'USA', 'Texas', '127427'), +('3963', 'East Los Angeles', 'USA', 'California', '126379'), +('3964', 'Fullerton', 'USA', 'California', '126003'), +('3965', 'Corona', 'USA', 'California', '124966'), +('3966', 'Flint', 'USA', 'Michigan', '124943'), +('3967', 'Paradise', 'USA', 'Nevada', '124682'), +('3968', 'Mesquite', 'USA', 'Texas', '124523'), +('3969', 'Sterling Heights', 'USA', 'Michigan', '124471'), +('3970', 'Sioux Falls', 'USA', 'South Dakota', '123975'), +('3971', 'New Haven', 'USA', 'Connecticut', '123626'), +('3972', 'Topeka', 'USA', 'Kansas', '122377'), +('3973', 'Concord', 'USA', 'California', '121780'), +('3974', 'Evansville', 'USA', 'Indiana', '121582'), +('3975', 'Hartford', 'USA', 'Connecticut', '121578'), +('3976', 'Fayetteville', 'USA', 'North Carolina', '121015'), +('3977', 'Cedar Rapids', 'USA', 'Iowa', '120758'), +('3978', 'Elizabeth', 'USA', 'New Jersey', '120568'), +('3979', 'Lansing', 'USA', 'Michigan', '119128'), +('3980', 'Lancaster', 'USA', 'California', '118718'), +('3981', 'Fort Collins', 'USA', 'Colorado', '118652'), +('3982', 'Coral Springs', 'USA', 'Florida', '117549'), +('3983', 'Stamford', 'USA', 'Connecticut', '117083'), +('3984', 'Thousand Oaks', 'USA', 'California', '117005'), +('3985', 'Vallejo', 'USA', 'California', '116760'), +('3986', 'Palmdale', 'USA', 'California', '116670'), +('3987', 'Columbia', 'USA', 'South Carolina', '116278'), +('3988', 'El Monte', 'USA', 'California', '115965'), +('3989', 'Abilene', 'USA', 'Texas', '115930'), +('3990', 'North Las Vegas', 'USA', 'Nevada', '115488'), +('3991', 'Ann Arbor', 'USA', 'Michigan', '114024'), +('3992', 'Beaumont', 'USA', 'Texas', '113866'), +('3993', 'Waco', 'USA', 'Texas', '113726'), +('3994', 'Macon', 'USA', 'Georgia', '113336'), +('3995', 'Independence', 'USA', 'Missouri', '113288'), +('3996', 'Peoria', 'USA', 'Illinois', '112936'), +('3997', 'Inglewood', 'USA', 'California', '112580'), +('3998', 'Springfield', 'USA', 'Illinois', '111454'), +('3999', 'Simi Valley', 'USA', 'California', '111351'); + +INSERT INTO city (id, name, countrycode, district, population) VALUES +('4000', 'Lafayette', 'USA', 'Louisiana', '110257'), +('4001', 'Gilbert', 'USA', 'Arizona', '109697'), +('4002', 'Carrollton', 'USA', 'Texas', '109576'), +('4003', 'Bellevue', 'USA', 'Washington', '109569'), +('4004', 'West Valley City', 'USA', 'Utah', '108896'), +('4005', 'Clarksville', 'USA', 'Tennessee', '108787'), +('4006', 'Costa Mesa', 'USA', 'California', '108724'), +('4007', 'Peoria', 'USA', 'Arizona', '108364'), +('4008', 'South Bend', 'USA', 'Indiana', '107789'), +('4009', 'Downey', 'USA', 'California', '107323'), +('4010', 'Waterbury', 'USA', 'Connecticut', '107271'), +('4011', 'Manchester', 'USA', 'New Hampshire', '107006'), +('4012', 'Allentown', 'USA', 'Pennsylvania', '106632'), +('4013', 'McAllen', 'USA', 'Texas', '106414'), +('4014', 'Joliet', 'USA', 'Illinois', '106221'), +('4015', 'Lowell', 'USA', 'Massachusetts', '105167'), +('4016', 'Provo', 'USA', 'Utah', '105166'), +('4017', 'West Covina', 'USA', 'California', '105080'), +('4018', 'Wichita Falls', 'USA', 'Texas', '104197'), +('4019', 'Erie', 'USA', 'Pennsylvania', '103717'), +('4020', 'Daly City', 'USA', 'California', '103621'), +('4021', 'Citrus Heights', 'USA', 'California', '103455'), +('4022', 'Norwalk', 'USA', 'California', '103298'), +('4023', 'Gary', 'USA', 'Indiana', '102746'), +('4024', 'Berkeley', 'USA', 'California', '102743'), +('4025', 'Santa Clara', 'USA', 'California', '102361'), +('4026', 'Green Bay', 'USA', 'Wisconsin', '102313'), +('4027', 'Cape Coral', 'USA', 'Florida', '102286'), +('4028', 'Arvada', 'USA', 'Colorado', '102153'), +('4029', 'Pueblo', 'USA', 'Colorado', '102121'), +('4030', 'Sandy', 'USA', 'Utah', '101853'), +('4031', 'Athens-Clarke County', 'USA', 'Georgia', '101489'), +('4032', 'Cambridge', 'USA', 'Massachusetts', '101355'), +('4033', 'Westminster', 'USA', 'Colorado', '100940'), +('4034', 'San Buenaventura', 'USA', 'California', '100916'), +('4035', 'Portsmouth', 'USA', 'Virginia', '100565'), +('4036', 'Livonia', 'USA', 'Michigan', '100545'), +('4037', 'Burbank', 'USA', 'California', '100316'), +('4038', 'Clearwater', 'USA', 'Florida', '99936'), +('4039', 'Midland', 'USA', 'Texas', '98293'), +('4040', 'Davenport', 'USA', 'Iowa', '98256'), +('4041', 'Mission Viejo', 'USA', 'California', '98049'), +('4042', 'Miami Beach', 'USA', 'Florida', '97855'), +('4043', 'Sunrise Manor', 'USA', 'Nevada', '95362'), +('4044', 'New Bedford', 'USA', 'Massachusetts', '94780'), +('4045', 'El Cajon', 'USA', 'California', '94578'), +('4046', 'Norman', 'USA', 'Oklahoma', '94193'), +('4047', 'Richmond', 'USA', 'California', '94100'), +('4048', 'Albany', 'USA', 'New York', '93994'), +('4049', 'Brockton', 'USA', 'Massachusetts', '93653'), +('4050', 'Roanoke', 'USA', 'Virginia', '93357'), +('4051', 'Billings', 'USA', 'Montana', '92988'), +('4052', 'Compton', 'USA', 'California', '92864'), +('4053', 'Gainesville', 'USA', 'Florida', '92291'), +('4054', 'Fairfield', 'USA', 'California', '92256'), +('4055', 'Arden-Arcade', 'USA', 'California', '92040'), +('4056', 'San Mateo', 'USA', 'California', '91799'), +('4057', 'Visalia', 'USA', 'California', '91762'), +('4058', 'Boulder', 'USA', 'Colorado', '91238'), +('4059', 'Cary', 'USA', 'North Carolina', '91213'), +('4060', 'Santa Monica', 'USA', 'California', '91084'), +('4061', 'Fall River', 'USA', 'Massachusetts', '90555'), +('4062', 'Kenosha', 'USA', 'Wisconsin', '89447'), +('4063', 'Elgin', 'USA', 'Illinois', '89408'), +('4064', 'Odessa', 'USA', 'Texas', '89293'), +('4065', 'Carson', 'USA', 'California', '89089'), +('4066', 'Charleston', 'USA', 'South Carolina', '89063'), +('4067', 'Charlotte Amalie', 'VIR', 'St Thomas', '13000'), +('4068', 'Harare', 'ZWE', 'Harare', '1410000'), +('4069', 'Bulawayo', 'ZWE', 'Bulawayo', '621742'), +('4070', 'Chitungwiza', 'ZWE', 'Harare', '274912'), +('4071', 'Mount Darwin', 'ZWE', 'Harare', '164362'), +('4072', 'Mutare', 'ZWE', 'Manicaland', '131367'), +('4073', 'Gweru', 'ZWE', 'Midlands', '128037'), +('4074', 'Gaza', 'PSE', 'Gaza', '353632'), +('4075', 'Khan Yunis', 'PSE', 'Khan Yunis', '123175'), +('4076', 'Hebron', 'PSE', 'Hebron', '119401'), +('4077', 'Jabaliya', 'PSE', 'North Gaza', '113901'), +('4078', 'Nablus', 'PSE', 'Nablus', '100231'), +('4079', 'Rafah', 'PSE', 'Rafah', '92020'); + +-- +-- Data for Name: country; Type: TABLE DATA; Schema: public; Owner: chriskl +-- +INSERT INTO country (code, name, continent, region, surfacearea, indepyear, population, lifeexpectancy, gnp, gnpold, localname, governmentform, headofstate, capital, code2) VALUES +('AFG', 'Afghanistan', 'Asia', 'Southern and Central Asia', '652090', '1919', '22720000', '45.900002', '5976.00', NULL, 'Afganistan/Afqanestan', 'Islamic Emirate', 'Mohammad Omar', '1', 'AF'), +('NLD', 'Netherlands', 'Europe', 'Western Europe', '41526', '1581', '15864000', '78.300003', '371362.00', '360478.00', 'Nederland', 'Constitutional Monarchy', 'Beatrix', '5', 'NL'), +('ANT', 'Netherlands Antilles', 'North America', 'Caribbean', '800', NULL, '217000', '74.699997', '1941.00', NULL, 'Nederlandse Antillen', 'Nonmetropolitan Territory of The Netherlands', 'Beatrix', '33', 'AN'), +('ALB', 'Albania', 'Europe', 'Southern Europe', '28748', '1912', '3401200', '71.599998', '3205.00', '2500.00', 'Shqipëria', 'Republic', 'Rexhep Mejdani', '34', 'AL'), +('DZA', 'Algeria', 'Africa', 'Northern Africa', '2381741', '1962', '31471000', '69.699997', '49982.00', '46966.00', 'Al-Jaza’ir/Algérie', 'Republic', 'Abdelaziz Bouteflika', '35', 'DZ'), +('ASM', 'American Samoa', 'Oceania', 'Polynesia', '199', NULL, '68000', '75.099998', '334.00', NULL, 'Amerika Samoa', 'US Territory', 'George W. Bush', '54', 'AS'), +('AND', 'Andorra', 'Europe', 'Southern Europe', '468', '1278', '78000', '83.5', '1630.00', NULL, 'Andorra', 'Parliamentary Coprincipality', '', '55', 'AD'), +('AGO', 'Angola', 'Africa', 'Central Africa', '1246700', '1975', '12878000', '38.299999', '6648.00', '7984.00', 'Angola', 'Republic', 'José Eduardo dos Santos', '56', 'AO'), +('AIA', 'Anguilla', 'North America', 'Caribbean', '96', NULL, '8000', '76.099998', '63.20', NULL, 'Anguilla', 'Dependent Territory of the UK', 'Elisabeth II', '62', 'AI'), +('ATG', 'Antigua and Barbuda', 'North America', 'Caribbean', '442', '1981', '68000', '70.5', '612.00', '584.00', 'Antigua and Barbuda', 'Constitutional Monarchy', 'Elisabeth II', '63', 'AG'), +('ARE', 'United Arab Emirates', 'Asia', 'Middle East', '83600', '1971', '2441000', '74.099998', '37966.00', '36846.00', 'Al-Imarat al-´Arabiya al-Muttahida', 'Emirate Federation', 'Zayid bin Sultan al-Nahayan', '65', 'AE'), +('ARG', 'Argentina', 'South America', 'South America', '2780400', '1816', '37032000', '75.099998', '340238.00', '323310.00', 'Argentina', 'Federal Republic', 'Fernando de la Rúa', '69', 'AR'), +('ARM', 'Armenia', 'Asia', 'Middle East', '29800', '1991', '3520000', '66.400002', '1813.00', '1627.00', 'Hajastan', 'Republic', 'Robert Kotšarjan', '126', 'AM'), +('ABW', 'Aruba', 'North America', 'Caribbean', '193', NULL, '103000', '78.400002', '828.00', '793.00', 'Aruba', 'Nonmetropolitan Territory of The Netherlands', 'Beatrix', '129', 'AW'), +('AUS', 'Australia', 'Oceania', 'Australia and New Zealand', '7741220', '1901', '18886000', '79.800003', '351182.00', '392911.00', 'Australia', 'Constitutional Monarchy, Federation', 'Elisabeth II', '135', 'AU'), +('AZE', 'Azerbaijan', 'Asia', 'Middle East', '86600', '1991', '7734000', '62.900002', '4127.00', '4100.00', 'Azärbaycan', 'Federal Republic', 'Heydär Äliyev', '144', 'AZ'), +('BHS', 'Bahamas', 'North America', 'Caribbean', '13878', '1973', '307000', '71.099998', '3527.00', '3347.00', 'The Bahamas', 'Constitutional Monarchy', 'Elisabeth II', '148', 'BS'), +('BHR', 'Bahrain', 'Asia', 'Middle East', '694', '1971', '617000', '73', '6366.00', '6097.00', 'Al-Bahrayn', 'Monarchy (Emirate)', 'Hamad ibn Isa al-Khalifa', '149', 'BH'), +('BGD', 'Bangladesh', 'Asia', 'Southern and Central Asia', '143998', '1971', '129155000', '60.200001', '32852.00', '31966.00', 'Bangladesh', 'Republic', 'Shahabuddin Ahmad', '150', 'BD'), +('BRB', 'Barbados', 'North America', 'Caribbean', '430', '1966', '270000', '73', '2223.00', '2186.00', 'Barbados', 'Constitutional Monarchy', 'Elisabeth II', '174', 'BB'), +('BEL', 'Belgium', 'Europe', 'Western Europe', '30518', '1830', '10239000', '77.800003', '249704.00', '243948.00', 'België/Belgique', 'Constitutional Monarchy, Federation', 'Albert II', '179', 'BE'), +('BLZ', 'Belize', 'North America', 'Central America', '22696', '1981', '241000', '70.900002', '630.00', '616.00', 'Belize', 'Constitutional Monarchy', 'Elisabeth II', '185', 'BZ'), +('BEN', 'Benin', 'Africa', 'Western Africa', '112622', '1960', '6097000', '50.200001', '2357.00', '2141.00', 'Bénin', 'Republic', 'Mathieu Kérékou', '187', 'BJ'), +('BMU', 'Bermuda', 'North America', 'North America', '53', NULL, '65000', '76.900002', '2328.00', '2190.00', 'Bermuda', 'Dependent Territory of the UK', 'Elisabeth II', '191', 'BM'), +('BTN', 'Bhutan', 'Asia', 'Southern and Central Asia', '47000', '1910', '2124000', '52.400002', '372.00', '383.00', 'Druk-Yul', 'Monarchy', 'Jigme Singye Wangchuk', '192', 'BT'), +('BOL', 'Bolivia', 'South America', 'South America', '1098581', '1825', '8329000', '63.700001', '8571.00', '7967.00', 'Bolivia', 'Republic', 'Hugo Bánzer Suárez', '194', 'BO'), +('BIH', 'Bosnia and Herzegovina', 'Europe', 'Southern Europe', '51197', '1992', '3972000', '71.5', '2841.00', NULL, 'Bosna i Hercegovina', 'Federal Republic', 'Ante Jelavic', '201', 'BA'), +('BWA', 'Botswana', 'Africa', 'Southern Africa', '581730', '1966', '1622000', '39.299999', '4834.00', '4935.00', 'Botswana', 'Republic', 'Festus G. Mogae', '204', 'BW'), +('BRA', 'Brazil', 'South America', 'South America', '8547403', '1822', '170115000', '62.900002', '776739.00', '804108.00', 'Brasil', 'Federal Republic', 'Fernando Henrique Cardoso', '211', 'BR'), +('GBR', 'United Kingdom', 'Europe', 'British Islands', '242900', '1066', '59623400', '77.699997', '1378330.00', '1296830.00', 'United Kingdom', 'Constitutional Monarchy', 'Elisabeth II', '456', 'GB'), +('VGB', 'Virgin Islands, British', 'North America', 'Caribbean', '151', NULL, '21000', '75.400002', '612.00', '573.00', 'British Virgin Islands', 'Dependent Territory of the UK', 'Elisabeth II', '537', 'VG'), +('BRN', 'Brunei', 'Asia', 'Southeast Asia', '5765', '1984', '328000', '73.599998', '11705.00', '12460.00', 'Brunei Darussalam', 'Monarchy (Sultanate)', 'Haji Hassan al-Bolkiah', '538', 'BN'), +('BGR', 'Bulgaria', 'Europe', 'Eastern Europe', '110994', '1908', '8190900', '70.900002', '12178.00', '10169.00', 'Balgarija', 'Republic', 'Petar Stojanov', '539', 'BG'), +('BFA', 'Burkina Faso', 'Africa', 'Western Africa', '274000', '1960', '11937000', '46.700001', '2425.00', '2201.00', 'Burkina Faso', 'Republic', 'Blaise Compaoré', '549', 'BF'), +('BDI', 'Burundi', 'Africa', 'Eastern Africa', '27834', '1962', '6695000', '46.200001', '903.00', '982.00', 'Burundi/Uburundi', 'Republic', 'Pierre Buyoya', '552', 'BI'), +('CYM', 'Cayman Islands', 'North America', 'Caribbean', '264', NULL, '38000', '78.900002', '1263.00', '1186.00', 'Cayman Islands', 'Dependent Territory of the UK', 'Elisabeth II', '553', 'KY'), +('CHL', 'Chile', 'South America', 'South America', '756626', '1810', '15211000', '75.699997', '72949.00', '75780.00', 'Chile', 'Republic', 'Ricardo Lagos Escobar', '554', 'CL'), +('COK', 'Cook Islands', 'Oceania', 'Polynesia', '236', NULL, '20000', '71.099998', '100.00', NULL, 'The Cook Islands', 'Nonmetropolitan Territory of New Zealand', 'Elisabeth II', '583', 'CK'), +('CRI', 'Costa Rica', 'North America', 'Central America', '51100', '1821', '4023000', '75.800003', '10226.00', '9757.00', 'Costa Rica', 'Republic', 'Miguel Ángel Rodríguez Echeverría', '584', 'CR'), +('DJI', 'Djibouti', 'Africa', 'Eastern Africa', '23200', '1977', '638000', '50.799999', '382.00', '373.00', 'Djibouti/Jibuti', 'Republic', 'Ismail Omar Guelleh', '585', 'DJ'), +('DMA', 'Dominica', 'North America', 'Caribbean', '751', '1978', '71000', '73.400002', '256.00', '243.00', 'Dominica', 'Republic', 'Vernon Shaw', '586', 'DM'), +('DOM', 'Dominican Republic', 'North America', 'Caribbean', '48511', '1844', '8495000', '73.199997', '15846.00', '15076.00', 'República Dominicana', 'Republic', 'Hipólito Mejía Domínguez', '587', 'DO'), +('ECU', 'Ecuador', 'South America', 'South America', '283561', '1822', '12646000', '71.099998', '19770.00', '19769.00', 'Ecuador', 'Republic', 'Gustavo Noboa Bejarano', '594', 'EC'), +('EGY', 'Egypt', 'Africa', 'Northern Africa', '1001449', '1922', '68470000', '63.299999', '82710.00', '75617.00', 'Misr', 'Republic', 'Hosni Mubarak', '608', 'EG'), +('SLV', 'El Salvador', 'North America', 'Central America', '21041', '1841', '6276000', '69.699997', '11863.00', '11203.00', 'El Salvador', 'Republic', 'Francisco Guillermo Flores Pérez', '645', 'SV'), +('ERI', 'Eritrea', 'Africa', 'Eastern Africa', '117600', '1993', '3850000', '55.799999', '650.00', '755.00', 'Ertra', 'Republic', 'Isayas Afewerki [Isaias Afwerki]', '652', 'ER'), +('ESP', 'Spain', 'Europe', 'Southern Europe', '505992', '1492', '39441700', '78.800003', '553233.00', '532031.00', 'Espańa', 'Constitutional Monarchy', 'Juan Carlos I', '653', 'ES'), +('ZAF', 'South Africa', 'Africa', 'Southern Africa', '1221037', '1910', '40377000', '51.099998', '116729.00', '129092.00', 'South Africa', 'Republic', 'Thabo Mbeki', '716', 'ZA'), +('ETH', 'Ethiopia', 'Africa', 'Eastern Africa', '1104300', '-1000', '62565000', '45.200001', '6353.00', '6180.00', 'YeItyop´iya', 'Republic', 'Negasso Gidada', '756', 'ET'), +('FLK', 'Falkland Islands', 'South America', 'South America', '12173', NULL, '2000', NULL, '0.00', NULL, 'Falkland Islands', 'Dependent Territory of the UK', 'Elisabeth II', '763', 'FK'), +('FJI', 'Fiji Islands', 'Oceania', 'Melanesia', '18274', '1970', '817000', '67.900002', '1536.00', '2149.00', 'Fiji Islands', 'Republic', 'Josefa Iloilo', '764', 'FJ'), +('PHL', 'Philippines', 'Asia', 'Southeast Asia', '300000', '1946', '75967000', '67.5', '65107.00', '82239.00', 'Pilipinas', 'Republic', 'Gloria Macapagal-Arroyo', '766', 'PH'), +('FRO', 'Faroe Islands', 'Europe', 'Nordic Countries', '1399', NULL, '43000', '78.400002', '0.00', NULL, 'Fřroyar', 'Part of Denmark', 'Margrethe II', '901', 'FO'), +('GAB', 'Gabon', 'Africa', 'Central Africa', '267668', '1960', '1226000', '50.099998', '5493.00', '5279.00', 'Le Gabon', 'Republic', 'Omar Bongo', '902', 'GA'), +('GMB', 'Gambia', 'Africa', 'Western Africa', '11295', '1965', '1305000', '53.200001', '320.00', '325.00', 'The Gambia', 'Republic', 'Yahya Jammeh', '904', 'GM'), +('GEO', 'Georgia', 'Asia', 'Middle East', '69700', '1991', '4968000', '64.5', '6064.00', '5924.00', 'Sakartvelo', 'Republic', 'Eduard Ševardnadze', '905', 'GE'), +('GHA', 'Ghana', 'Africa', 'Western Africa', '238533', '1957', '20212000', '57.400002', '7137.00', '6884.00', 'Ghana', 'Republic', 'John Kufuor', '910', 'GH'), +('GIB', 'Gibraltar', 'Europe', 'Southern Europe', '6', NULL, '25000', '79', '258.00', NULL, 'Gibraltar', 'Dependent Territory of the UK', 'Elisabeth II', '915', 'GI'), +('GRD', 'Grenada', 'North America', 'Caribbean', '344', '1974', '94000', '64.5', '318.00', NULL, 'Grenada', 'Constitutional Monarchy', 'Elisabeth II', '916', 'GD'), +('GRL', 'Greenland', 'North America', 'North America', '2166090', NULL, '56000', '68.099998', '0.00', NULL, 'Kalaallit Nunaat/Grřnland', 'Part of Denmark', 'Margrethe II', '917', 'GL'), +('GLP', 'Guadeloupe', 'North America', 'Caribbean', '1705', NULL, '456000', '77', '3501.00', NULL, 'Guadeloupe', 'Overseas Department of France', 'Jacques Chirac', '919', 'GP'), +('GUM', 'Guam', 'Oceania', 'Micronesia', '549', NULL, '168000', '77.800003', '1197.00', '1136.00', 'Guam', 'US Territory', 'George W. Bush', '921', 'GU'), +('GTM', 'Guatemala', 'North America', 'Central America', '108889', '1821', '11385000', '66.199997', '19008.00', '17797.00', 'Guatemala', 'Republic', 'Alfonso Portillo Cabrera', '922', 'GT'), +('GIN', 'Guinea', 'Africa', 'Western Africa', '245857', '1958', '7430000', '45.599998', '2352.00', '2383.00', 'Guinée', 'Republic', 'Lansana Conté', '926', 'GN'), +('GNB', 'Guinea-Bissau', 'Africa', 'Western Africa', '36125', '1974', '1213000', '49', '293.00', '272.00', 'Guiné-Bissau', 'Republic', 'Kumba Ialá', '927', 'GW'), +('GUY', 'Guyana', 'South America', 'South America', '214969', '1966', '861000', '64', '722.00', '743.00', 'Guyana', 'Republic', 'Bharrat Jagdeo', '928', 'GY'), +('HTI', 'Haiti', 'North America', 'Caribbean', '27750', '1804', '8222000', '49.200001', '3459.00', '3107.00', 'Haďti/Dayti', 'Republic', 'Jean-Bertrand Aristide', '929', 'HT'), +('HND', 'Honduras', 'North America', 'Central America', '112088', '1838', '6485000', '69.900002', '5333.00', '4697.00', 'Honduras', 'Republic', 'Carlos Roberto Flores Facussé', '933', 'HN'), +('HKG', 'Hong Kong', 'Asia', 'Eastern Asia', '1075', NULL, '6782000', '79.5', '166448.00', '173610.00', 'Xianggang/Hong Kong', 'Special Administrative Region of China', 'Jiang Zemin', '937', 'HK'), +('SJM', 'Svalbard and Jan Mayen', 'Europe', 'Nordic Countries', '62422', NULL, '3200', NULL, '0.00', NULL, 'Svalbard og Jan Mayen', 'Dependent Territory of Norway', 'Harald V', '938', 'SJ'), +('IDN', 'Indonesia', 'Asia', 'Southeast Asia', '1904569', '1945', '212107000', '68', '84982.00', '215002.00', 'Indonesia', 'Republic', 'Abdurrahman Wahid', '939', 'ID'), +('IND', 'India', 'Asia', 'Southern and Central Asia', '3287263', '1947', '1013662000', '62.5', '447114.00', '430572.00', 'Bharat/India', 'Federal Republic', 'Kocheril Raman Narayanan', '1109', 'IN'), +('IRQ', 'Iraq', 'Asia', 'Middle East', '438317', '1932', '23115000', '66.5', '11500.00', NULL, 'Al-´Iraq', 'Republic', 'Saddam Hussein al-Takriti', '1365', 'IQ'), +('IRN', 'Iran', 'Asia', 'Southern and Central Asia', '1648195', '1906', '67702000', '69.699997', '195746.00', '160151.00', 'Iran', 'Islamic Republic', 'Ali Mohammad Khatami-Ardakani', '1380', 'IR'), +('IRL', 'Ireland', 'Europe', 'British Islands', '70273', '1921', '3775100', '76.800003', '75921.00', '73132.00', 'Ireland/Éire', 'Republic', 'Mary McAleese', '1447', 'IE'), +('ISL', 'Iceland', 'Europe', 'Nordic Countries', '103000', '1944', '279000', '79.400002', '8255.00', '7474.00', 'Ísland', 'Republic', 'Ólafur Ragnar Grímsson', '1449', 'IS'), +('ISR', 'Israel', 'Asia', 'Middle East', '21056', '1948', '6217000', '78.599998', '97477.00', '98577.00', 'Yisra’el/Isra’il', 'Republic', 'Moshe Katzav', '1450', 'IL'), +('ITA', 'Italy', 'Europe', 'Southern Europe', '301316', '1861', '57680000', '79', '1161755.00', '1145372.00', 'Italia', 'Republic', 'Carlo Azeglio Ciampi', '1464', 'IT'), +('TMP', 'East Timor', 'Asia', 'Southeast Asia', '14874', NULL, '885000', '46', '0.00', NULL, 'Timor Timur', 'Administrated by the UN', 'José Alexandre Gusmăo', '1522', 'TP'), +('AUT', 'Austria', 'Europe', 'Western Europe', '83859', '1918', '8091800', '77.699997', '211860.00', '206025.00', 'Österreich', 'Federal Republic', 'Thomas Klestil', '1523', 'AT'), +('JAM', 'Jamaica', 'North America', 'Caribbean', '10990', '1962', '2583000', '75.199997', '6871.00', '6722.00', 'Jamaica', 'Constitutional Monarchy', 'Elisabeth II', '1530', 'JM'), +('JPN', 'Japan', 'Asia', 'Eastern Asia', '377829', '-660', '126714000', '80.699997', '3787042.00', '4192638.00', 'Nihon/Nippon', 'Constitutional Monarchy', 'Akihito', '1532', 'JP'), +('YEM', 'Yemen', 'Asia', 'Middle East', '527968', '1918', '18112000', '59.799999', '6041.00', '5729.00', 'Al-Yaman', 'Republic', 'Ali Abdallah Salih', '1780', 'YE'), +('JOR', 'Jordan', 'Asia', 'Middle East', '88946', '1946', '5083000', '77.400002', '7526.00', '7051.00', 'Al-Urdunn', 'Constitutional Monarchy', 'Abdullah II', '1786', 'JO'), +('CXR', 'Christmas Island', 'Oceania', 'Australia and New Zealand', '135', NULL, '2500', NULL, '0.00', NULL, 'Christmas Island', 'Territory of Australia', 'Elisabeth II', '1791', 'CX'), +('YUG', 'Yugoslavia', 'Europe', 'Southern Europe', '102173', '1918', '10640000', '72.400002', '17000.00', NULL, 'Jugoslavija', 'Federal Republic', 'Vojislav Koštunica', '1792', 'YU'), +('KHM', 'Cambodia', 'Asia', 'Southeast Asia', '181035', '1953', '11168000', '56.5', '5121.00', '5670.00', 'Kâmpuchéa', 'Constitutional Monarchy', 'Norodom Sihanouk', '1800', 'KH'), +('CMR', 'Cameroon', 'Africa', 'Central Africa', '475442', '1960', '15085000', '54.799999', '9174.00', '8596.00', 'Cameroun/Cameroon', 'Republic', 'Paul Biya', '1804', 'CM'), +('CAN', 'Canada', 'North America', 'North America', '9970610', '1867', '31147000', '79.400002', '598862.00', '625626.00', 'Canada', 'Constitutional Monarchy, Federation', 'Elisabeth II', '1822', 'CA'), +('CPV', 'Cape Verde', 'Africa', 'Western Africa', '4033', '1975', '428000', '68.900002', '435.00', '420.00', 'Cabo Verde', 'Republic', 'António Mascarenhas Monteiro', '1859', 'CV'), +('KAZ', 'Kazakstan', 'Asia', 'Southern and Central Asia', '2724900', '1991', '16223000', '63.200001', '24375.00', '23383.00', 'Qazaqstan', 'Republic', 'Nursultan Nazarbajev', '1864', 'KZ'), +('KEN', 'Kenya', 'Africa', 'Eastern Africa', '580367', '1963', '30080000', '48', '9217.00', '10241.00', 'Kenya', 'Republic', 'Daniel arap Moi', '1881', 'KE'), +('CAF', 'Central African Republic', 'Africa', 'Central Africa', '622984', '1960', '3615000', '44', '1054.00', '993.00', 'Centrafrique/Bę-Afrîka', 'Republic', 'Ange-Félix Patassé', '1889', 'CF'), +('CHN', 'China', 'Asia', 'Eastern Asia', '9572900', '-1523', '1277558000', '71.400002', '982268.00', '917719.00', 'Zhongquo', 'People''sRepublic', 'Jiang Zemin', '1891', 'CN'), +('KGZ', 'Kyrgyzstan', 'Asia', 'Southern and Central Asia', '199900', '1991', '4699000', '63.400002', '1626.00', '1767.00', 'Kyrgyzstan', 'Republic', 'Askar Akajev', '2253', 'KG'), +('KIR', 'Kiribati', 'Oceania', 'Micronesia', '726', '1979', '83000', '59.799999', '40.70', NULL, 'Kiribati', 'Republic', 'Teburoro Tito', '2256', 'KI'), +('COL', 'Colombia', 'South America', 'South America', '1138914', '1810', '42321000', '70.300003', '102896.00', '105116.00', 'Colombia', 'Republic', 'Andrés Pastrana Arango', '2257', 'CO'), +('COM', 'Comoros', 'Africa', 'Eastern Africa', '1862', '1975', '578000', '60', '4401.00', '4361.00', 'Komori/Comores', 'Republic', 'Azali Assoumani', '2295', 'KM'), +('COG', 'Congo', 'Africa', 'Central Africa', '342000', '1960', '2943000', '47.400002', '2108.00', '2287.00', 'Congo', 'Republic', 'Denis Sassou-Nguesso', '2296', 'CG'), +('COD', 'Congo, The Democratic Republic of the', 'Africa', 'Central Africa', '2344858', '1960', '51654000', '48.799999', '6964.00', '2474.00', 'République Démocratique du Congo', 'Republic', 'Joseph Kabila', '2298', 'CD'), +('CCK', 'Cocos (Keeling) Islands', 'Oceania', 'Australia and New Zealand', '14', NULL, '600', NULL, '0.00', NULL, 'Cocos (Keeling) Islands', 'Territory of Australia', 'Elisabeth II', '2317', 'CC'), +('PRK', 'North Korea', 'Asia', 'Eastern Asia', '120538', '1948', '24039000', '70.699997', '5332.00', NULL, 'Choson Minjujuui In´min Konghwaguk (Bukhan)', 'Socialistic Republic', 'Kim Jong-il', '2318', 'KP'), +('KOR', 'South Korea', 'Asia', 'Eastern Asia', '99434', '1948', '46844000', '74.400002', '320749.00', '442544.00', 'Taehan Min’guk (Namhan)', 'Republic', 'Kim Dae-jung', '2331', 'KR'), +('GRC', 'Greece', 'Europe', 'Southern Europe', '131626', '1830', '10545700', '78.400002', '120724.00', '119946.00', 'Elláda', 'Republic', 'Kostis Stefanopoulos', '2401', 'GR'), +('HRV', 'Croatia', 'Europe', 'Southern Europe', '56538', '1991', '4473000', '73.699997', '20208.00', '19300.00', 'Hrvatska', 'Republic', 'Štipe Mesic', '2409', 'HR'), +('CUB', 'Cuba', 'North America', 'Caribbean', '110861', '1902', '11201000', '76.199997', '17843.00', '18862.00', 'Cuba', 'Socialistic Republic', 'Fidel Castro Ruz', '2413', 'CU'), +('KWT', 'Kuwait', 'Asia', 'Middle East', '17818', '1961', '1972000', '76.099998', '27037.00', '30373.00', 'Al-Kuwayt', 'Constitutional Monarchy (Emirate)', 'Jabir al-Ahmad al-Jabir al-Sabah', '2429', 'KW'), +('CYP', 'Cyprus', 'Asia', 'Middle East', '9251', '1960', '754700', '76.699997', '9333.00', '8246.00', 'Kýpros/Kibris', 'Republic', 'Glafkos Klerides', '2430', 'CY'), +('LAO', 'Laos', 'Asia', 'Southeast Asia', '236800', '1953', '5433000', '53.099998', '1292.00', '1746.00', 'Lao', 'Republic', 'Khamtay Siphandone', '2432', 'LA'), +('LVA', 'Latvia', 'Europe', 'Baltic Countries', '64589', '1991', '2424200', '68.400002', '6398.00', '5639.00', 'Latvija', 'Republic', 'Vaira Vike-Freiberga', '2434', 'LV'), +('LSO', 'Lesotho', 'Africa', 'Southern Africa', '30355', '1966', '2153000', '50.799999', '1061.00', '1161.00', 'Lesotho', 'Constitutional Monarchy', 'Letsie III', '2437', 'LS'), +('LBN', 'Lebanon', 'Asia', 'Middle East', '10400', '1941', '3282000', '71.300003', '17121.00', '15129.00', 'Lubnan', 'Republic', 'Émile Lahoud', '2438', 'LB'), +('LBR', 'Liberia', 'Africa', 'Western Africa', '111369', '1847', '3154000', '51', '2012.00', NULL, 'Liberia', 'Republic', 'Charles Taylor', '2440', 'LR'), +('LBY', 'Libyan Arab Jamahiriya', 'Africa', 'Northern Africa', '1759540', '1951', '5605000', '75.5', '44806.00', '40562.00', 'Libiya', 'Socialistic State', 'Muammar al-Qadhafi', '2441', 'LY'), +('LIE', 'Liechtenstein', 'Europe', 'Western Europe', '160', '1806', '32300', '78.800003', '1119.00', '1084.00', 'Liechtenstein', 'Constitutional Monarchy', 'Hans-Adam II', '2446', 'LI'), +('LTU', 'Lithuania', 'Europe', 'Baltic Countries', '65301', '1991', '3698500', '69.099998', '10692.00', '9585.00', 'Lietuva', 'Republic', 'Valdas Adamkus', '2447', 'LT'), +('LUX', 'Luxembourg', 'Europe', 'Western Europe', '2586', '1867', '435700', '77.099998', '16321.00', '15519.00', 'Luxembourg/Lëtzebuerg', 'Constitutional Monarchy', 'Henri', '2452', 'LU'), +('ESH', 'Western Sahara', 'Africa', 'Northern Africa', '266000', NULL, '293000', '49.799999', '60.00', NULL, 'As-Sahrawiya', 'Occupied by Marocco', 'Mohammed Abdel Aziz', '2453', 'EH'), +('MAC', 'Macao', 'Asia', 'Eastern Asia', '18', NULL, '473000', '81.599998', '5749.00', '5940.00', 'Macau/Aomen', 'Special Administrative Region of China', 'Jiang Zemin', '2454', 'MO'), +('MDG', 'Madagascar', 'Africa', 'Eastern Africa', '587041', '1960', '15942000', '55', '3750.00', '3545.00', 'Madagasikara/Madagascar', 'Federal Republic', 'Didier Ratsiraka', '2455', 'MG'), +('MKD', 'Macedonia', 'Europe', 'Southern Europe', '25713', '1991', '2024000', '73.800003', '1694.00', '1915.00', 'Makedonija', 'Republic', 'Boris Trajkovski', '2460', 'MK'), +('MWI', 'Malawi', 'Africa', 'Eastern Africa', '118484', '1964', '10925000', '37.599998', '1687.00', '2527.00', 'Malawi', 'Republic', 'Bakili Muluzi', '2462', 'MW'), +('MDV', 'Maldives', 'Asia', 'Southern and Central Asia', '298', '1965', '286000', '62.200001', '199.00', NULL, 'Dhivehi Raajje/Maldives', 'Republic', 'Maumoon Abdul Gayoom', '2463', 'MV'), +('MYS', 'Malaysia', 'Asia', 'Southeast Asia', '329758', '1957', '22244000', '70.800003', '69213.00', '97884.00', 'Malaysia', 'Constitutional Monarchy, Federation', 'Salahuddin Abdul Aziz Shah Alhaj', '2464', 'MY'), +('MLI', 'Mali', 'Africa', 'Western Africa', '1240192', '1960', '11234000', '46.700001', '2642.00', '2453.00', 'Mali', 'Republic', 'Alpha Oumar Konaré', '2482', 'ML'), +('MLT', 'Malta', 'Europe', 'Southern Europe', '316', '1964', '380200', '77.900002', '3512.00', '3338.00', 'Malta', 'Republic', 'Guido de Marco', '2484', 'MT'), +('MAR', 'Morocco', 'Africa', 'Northern Africa', '446550', '1956', '28351000', '69.099998', '36124.00', '33514.00', 'Al-Maghrib', 'Constitutional Monarchy', 'Mohammed VI', '2486', 'MA'), +('MHL', 'Marshall Islands', 'Oceania', 'Micronesia', '181', '1990', '64000', '65.5', '97.00', NULL, 'Marshall Islands/Majol', 'Republic', 'Kessai Note', '2507', 'MH'), +('MTQ', 'Martinique', 'North America', 'Caribbean', '1102', NULL, '395000', '78.300003', '2731.00', '2559.00', 'Martinique', 'Overseas Department of France', 'Jacques Chirac', '2508', 'MQ'), +('MRT', 'Mauritania', 'Africa', 'Western Africa', '1025520', '1960', '2670000', '50.799999', '998.00', '1081.00', 'Muritaniya/Mauritanie', 'Republic', 'Maaouiya Ould Sid´Ahmad Taya', '2509', 'MR'), +('MUS', 'Mauritius', 'Africa', 'Eastern Africa', '2040', '1968', '1158000', '71', '4251.00', '4186.00', 'Mauritius', 'Republic', 'Cassam Uteem', '2511', 'MU'), +('MYT', 'Mayotte', 'Africa', 'Eastern Africa', '373', NULL, '149000', '59.5', '0.00', NULL, 'Mayotte', 'Territorial Collectivity of France', 'Jacques Chirac', '2514', 'YT'), +('MEX', 'Mexico', 'North America', 'Central America', '1958201', '1810', '98881000', '71.5', '414972.00', '401461.00', 'México', 'Federal Republic', 'Vicente Fox Quesada', '2515', 'MX'), +('FSM', 'Micronesia, Federated States of', 'Oceania', 'Micronesia', '702', '1990', '119000', '68.599998', '212.00', NULL, 'Micronesia', 'Federal Republic', 'Leo A. Falcam', '2689', 'FM'), +('MDA', 'Moldova', 'Europe', 'Eastern Europe', '33851', '1991', '4380000', '64.5', '1579.00', '1872.00', 'Moldova', 'Republic', 'Vladimir Voronin', '2690', 'MD'), +('MCO', 'Monaco', 'Europe', 'Western Europe', '1.5', '1861', '34000', '78.800003', '776.00', NULL, 'Monaco', 'Constitutional Monarchy', 'Rainier III', '2695', 'MC'), +('MNG', 'Mongolia', 'Asia', 'Eastern Asia', '1566500', '1921', '2662000', '67.300003', '1043.00', '933.00', 'Mongol Uls', 'Republic', 'Natsagiin Bagabandi', '2696', 'MN'), +('MSR', 'Montserrat', 'North America', 'Caribbean', '102', NULL, '11000', '78', '109.00', NULL, 'Montserrat', 'Dependent Territory of the UK', 'Elisabeth II', '2697', 'MS'), +('MOZ', 'Mozambique', 'Africa', 'Eastern Africa', '801590', '1975', '19680000', '37.5', '2891.00', '2711.00', 'Moçambique', 'Republic', 'Joaquím A. Chissano', '2698', 'MZ'), +('MMR', 'Myanmar', 'Asia', 'Southeast Asia', '676578', '1948', '45611000', '54.900002', '180375.00', '171028.00', 'Myanma Pye', 'Republic', 'kenraali Than Shwe', '2710', 'MM'), +('NAM', 'Namibia', 'Africa', 'Southern Africa', '824292', '1990', '1726000', '42.5', '3101.00', '3384.00', 'Namibia', 'Republic', 'Sam Nujoma', '2726', 'NA'), +('NRU', 'Nauru', 'Oceania', 'Micronesia', '21', '1968', '12000', '60.799999', '197.00', NULL, 'Naoero/Nauru', 'Republic', 'Bernard Dowiyogo', '2728', 'NR'), +('NPL', 'Nepal', 'Asia', 'Southern and Central Asia', '147181', '1769', '23930000', '57.799999', '4768.00', '4837.00', 'Nepal', 'Constitutional Monarchy', 'Gyanendra Bir Bikram', '2729', 'NP'), +('NIC', 'Nicaragua', 'North America', 'Central America', '130000', '1838', '5074000', '68.699997', '1988.00', '2023.00', 'Nicaragua', 'Republic', 'Arnoldo Alemán Lacayo', '2734', 'NI'), +('NER', 'Niger', 'Africa', 'Western Africa', '1267000', '1960', '10730000', '41.299999', '1706.00', '1580.00', 'Niger', 'Republic', 'Mamadou Tandja', '2738', 'NE'), +('NGA', 'Nigeria', 'Africa', 'Western Africa', '923768', '1960', '111506000', '51.599998', '65707.00', '58623.00', 'Nigeria', 'Federal Republic', 'Olusegun Obasanjo', '2754', 'NG'), +('NIU', 'Niue', 'Oceania', 'Polynesia', '260', NULL, '2000', NULL, '0.00', NULL, 'Niue', 'Nonmetropolitan Territory of New Zealand', 'Elisabeth II', '2805', 'NU'), +('NFK', 'Norfolk Island', 'Oceania', 'Australia and New Zealand', '36', NULL, '2000', NULL, '0.00', NULL, 'Norfolk Island', 'Territory of Australia', 'Elisabeth II', '2806', 'NF'), +('NOR', 'Norway', 'Europe', 'Nordic Countries', '323877', '1905', '4478500', '78.699997', '145895.00', '153370.00', 'Norge', 'Constitutional Monarchy', 'Harald V', '2807', 'NO'), +('CIV', 'Côte d’Ivoire', 'Africa', 'Western Africa', '322463', '1960', '14786000', '45.200001', '11345.00', '10285.00', 'Côte d’Ivoire', 'Republic', 'Laurent Gbagbo', '2814', 'CI'), +('OMN', 'Oman', 'Asia', 'Middle East', '309500', '1951', '2542000', '71.800003', '16904.00', '16153.00', '´Uman', 'Monarchy (Sultanate)', 'Qabus ibn Sa´id', '2821', 'OM'), +('PAK', 'Pakistan', 'Asia', 'Southern and Central Asia', '796095', '1947', '156483000', '61.099998', '61289.00', '58549.00', 'Pakistan', 'Republic', 'Mohammad Rafiq Tarar', '2831', 'PK'), +('PLW', 'Palau', 'Oceania', 'Micronesia', '459', '1994', '19000', '68.599998', '105.00', NULL, 'Belau/Palau', 'Republic', 'Kuniwo Nakamura', '2881', 'PW'), +('PAN', 'Panama', 'North America', 'Central America', '75517', '1903', '2856000', '75.5', '9131.00', '8700.00', 'Panamá', 'Republic', 'Mireya Elisa Moscoso Rodríguez', '2882', 'PA'), +('PNG', 'Papua New Guinea', 'Oceania', 'Melanesia', '462840', '1975', '4807000', '63.099998', '4988.00', '6328.00', 'Papua New Guinea/Papua Niugini', 'Constitutional Monarchy', 'Elisabeth II', '2884', 'PG'), +('PRY', 'Paraguay', 'South America', 'South America', '406752', '1811', '5496000', '73.699997', '8444.00', '9555.00', 'Paraguay', 'Republic', 'Luis Ángel González Macchi', '2885', 'PY'), +('PER', 'Peru', 'South America', 'South America', '1285216', '1821', '25662000', '70', '64140.00', '65186.00', 'Perú/Piruw', 'Republic', 'Valentin Paniagua Corazao', '2890', 'PE'), +('PCN', 'Pitcairn', 'Oceania', 'Polynesia', '49', NULL, '50', NULL, '0.00', NULL, 'Pitcairn', 'Dependent Territory of the UK', 'Elisabeth II', '2912', 'PN'), +('MNP', 'Northern Mariana Islands', 'Oceania', 'Micronesia', '464', NULL, '78000', '75.5', '0.00', NULL, 'Northern Mariana Islands', 'Commonwealth of the US', 'George W. Bush', '2913', 'MP'), +('PRT', 'Portugal', 'Europe', 'Southern Europe', '91982', '1143', '9997600', '75.800003', '105954.00', '102133.00', 'Portugal', 'Republic', 'Jorge Sampăio', '2914', 'PT'), +('PRI', 'Puerto Rico', 'North America', 'Caribbean', '8875', NULL, '3869000', '75.599998', '34100.00', '32100.00', 'Puerto Rico', 'Commonwealth of the US', 'George W. Bush', '2919', 'PR'), +('POL', 'Poland', 'Europe', 'Eastern Europe', '323250', '1918', '38653600', '73.199997', '151697.00', '135636.00', 'Polska', 'Republic', 'Aleksander Kwasniewski', '2928', 'PL'), +('GNQ', 'Equatorial Guinea', 'Africa', 'Central Africa', '28051', '1968', '453000', '53.599998', '283.00', '542.00', 'Guinea Ecuatorial', 'Republic', 'Teodoro Obiang Nguema Mbasogo', '2972', 'GQ'), +('QAT', 'Qatar', 'Asia', 'Middle East', '11000', '1971', '599000', '72.400002', '9472.00', '8920.00', 'Qatar', 'Monarchy', 'Hamad ibn Khalifa al-Thani', '2973', 'QA'), +('FRA', 'France', 'Europe', 'Western Europe', '551500', '843', '59225700', '78.800003', '1424285.00', '1392448.00', 'France', 'Republic', 'Jacques Chirac', '2974', 'FR'), +('GUF', 'French Guiana', 'South America', 'South America', '90000', NULL, '181000', '76.099998', '681.00', NULL, 'Guyane française', 'Overseas Department of France', 'Jacques Chirac', '3014', 'GF'), +('PYF', 'French Polynesia', 'Oceania', 'Polynesia', '4000', NULL, '235000', '74.800003', '818.00', '781.00', 'Polynésie française', 'Nonmetropolitan Territory of France', 'Jacques Chirac', '3016', 'PF'), +('REU', 'Réunion', 'Africa', 'Eastern Africa', '2510', NULL, '699000', '72.699997', '8287.00', '7988.00', 'Réunion', 'Overseas Department of France', 'Jacques Chirac', '3017', 'RE'), +('ROM', 'Romania', 'Europe', 'Eastern Europe', '238391', '1878', '22455500', '69.900002', '38158.00', '34843.00', 'România', 'Republic', 'Ion Iliescu', '3018', 'RO'), +('RWA', 'Rwanda', 'Africa', 'Eastern Africa', '26338', '1962', '7733000', '39.299999', '2036.00', '1863.00', 'Rwanda/Urwanda', 'Republic', 'Paul Kagame', '3047', 'RW'), +('SWE', 'Sweden', 'Europe', 'Nordic Countries', '449964', '836', '8861400', '79.599998', '226492.00', '227757.00', 'Sverige', 'Constitutional Monarchy', 'Carl XVI Gustaf', '3048', 'SE'), +('SHN', 'Saint Helena', 'Africa', 'Western Africa', '314', NULL, '6000', '76.800003', '0.00', NULL, 'Saint Helena', 'Dependent Territory of the UK', 'Elisabeth II', '3063', 'SH'), +('KNA', 'Saint Kitts and Nevis', 'North America', 'Caribbean', '261', '1983', '38000', '70.699997', '299.00', NULL, 'Saint Kitts and Nevis', 'Constitutional Monarchy', 'Elisabeth II', '3064', 'KN'), +('LCA', 'Saint Lucia', 'North America', 'Caribbean', '622', '1979', '154000', '72.300003', '571.00', NULL, 'Saint Lucia', 'Constitutional Monarchy', 'Elisabeth II', '3065', 'LC'), +('VCT', 'Saint Vincent and the Grenadines', 'North America', 'Caribbean', '388', '1979', '114000', '72.300003', '285.00', NULL, 'Saint Vincent and the Grenadines', 'Constitutional Monarchy', 'Elisabeth II', '3066', 'VC'), +('SPM', 'Saint Pierre and Miquelon', 'North America', 'North America', '242', NULL, '7000', '77.599998', '0.00', NULL, 'Saint-Pierre-et-Miquelon', 'Territorial Collectivity of France', 'Jacques Chirac', '3067', 'PM'), +('DEU', 'Germany', 'Europe', 'Western Europe', '357022', '1955', '82164700', '77.400002', '2133367.00', '2102826.00', 'Deutschland', 'Federal Republic', 'Johannes Rau', '3068', 'DE'), +('SLB', 'Solomon Islands', 'Oceania', 'Melanesia', '28896', '1978', '444000', '71.300003', '182.00', '220.00', 'Solomon Islands', 'Constitutional Monarchy', 'Elisabeth II', '3161', 'SB'), +('ZMB', 'Zambia', 'Africa', 'Eastern Africa', '752618', '1964', '9169000', '37.200001', '3377.00', '3922.00', 'Zambia', 'Republic', 'Frederick Chiluba', '3162', 'ZM'), +('WSM', 'Samoa', 'Oceania', 'Polynesia', '2831', '1962', '180000', '69.199997', '141.00', '157.00', 'Samoa', 'Parlementary Monarchy', 'Malietoa Tanumafili II', '3169', 'WS'), +('SMR', 'San Marino', 'Europe', 'Southern Europe', '61', '885', '27000', '81.099998', '510.00', NULL, 'San Marino', 'Republic', '', '3171', 'SM'), +('STP', 'Sao Tome and Principe', 'Africa', 'Central Africa', '964', '1975', '147000', '65.300003', '6.00', NULL, 'Săo Tomé e Príncipe', 'Republic', 'Miguel Trovoada', '3172', 'ST'), +('SAU', 'Saudi Arabia', 'Asia', 'Middle East', '2149690', '1932', '21607000', '67.800003', '137635.00', '146171.00', 'Al-´Arabiya as-Sa´udiya', 'Monarchy', 'Fahd ibn Abdul-Aziz al-Sa´ud', '3173', 'SA'), +('SEN', 'Senegal', 'Africa', 'Western Africa', '196722', '1960', '9481000', '62.200001', '4787.00', '4542.00', 'Sénégal/Sounougal', 'Republic', 'Abdoulaye Wade', '3198', 'SN'), +('SYC', 'Seychelles', 'Africa', 'Eastern Africa', '455', '1976', '77000', '70.400002', '536.00', '539.00', 'Sesel/Seychelles', 'Republic', 'France-Albert René', '3206', 'SC'), +('SLE', 'Sierra Leone', 'Africa', 'Western Africa', '71740', '1961', '4854000', '45.299999', '746.00', '858.00', 'Sierra Leone', 'Republic', 'Ahmed Tejan Kabbah', '3207', 'SL'), +('SGP', 'Singapore', 'Asia', 'Southeast Asia', '618', '1965', '3567000', '80.099998', '86503.00', '96318.00', 'Singapore/Singapura/Xinjiapo/Singapur', 'Republic', 'Sellapan Rama Nathan', '3208', 'SG'), +('SVK', 'Slovakia', 'Europe', 'Eastern Europe', '49012', '1993', '5398700', '73.699997', '20594.00', '19452.00', 'Slovensko', 'Republic', 'Rudolf Schuster', '3209', 'SK'), +('SVN', 'Slovenia', 'Europe', 'Southern Europe', '20256', '1991', '1987800', '74.900002', '19756.00', '18202.00', 'Slovenija', 'Republic', 'Milan Kucan', '3212', 'SI'), +('SOM', 'Somalia', 'Africa', 'Eastern Africa', '637657', '1960', '10097000', '46.200001', '935.00', NULL, 'Soomaaliya', 'Republic', 'Abdiqassim Salad Hassan', '3214', 'SO'), +('LKA', 'Sri Lanka', 'Asia', 'Southern and Central Asia', '65610', '1948', '18827000', '71.800003', '15706.00', '15091.00', 'Sri Lanka/Ilankai', 'Republic', 'Chandrika Kumaratunga', '3217', 'LK'), +('SDN', 'Sudan', 'Africa', 'Northern Africa', '2505813', '1956', '29490000', '56.599998', '10162.00', NULL, 'As-Sudan', 'Islamic Republic', 'Omar Hassan Ahmad al-Bashir', '3225', 'SD'), +('FIN', 'Finland', 'Europe', 'Nordic Countries', '338145', '1917', '5171300', '77.400002', '121914.00', '119833.00', 'Suomi', 'Republic', 'Tarja Halonen', '3236', 'FI'), +('SUR', 'Suriname', 'South America', 'South America', '163265', '1975', '417000', '71.400002', '870.00', '706.00', 'Suriname', 'Republic', 'Ronald Venetiaan', '3243', 'SR'), +('SWZ', 'Swaziland', 'Africa', 'Southern Africa', '17364', '1968', '1008000', '40.400002', '1206.00', '1312.00', 'kaNgwane', 'Monarchy', 'Mswati III', '3244', 'SZ'), +('CHE', 'Switzerland', 'Europe', 'Western Europe', '41284', '1499', '7160400', '79.599998', '264478.00', '256092.00', 'Schweiz/Suisse/Svizzera/Svizra', 'Federation', 'Adolf Ogi', '3248', 'CH'), +('SYR', 'Syria', 'Asia', 'Middle East', '185180', '1941', '16125000', '68.5', '65984.00', '64926.00', 'Suriya', 'Republic', 'Bashar al-Assad', '3250', 'SY'), +('TJK', 'Tajikistan', 'Asia', 'Southern and Central Asia', '143100', '1991', '6188000', '64.099998', '1990.00', '1056.00', 'Toçikiston', 'Republic', 'Emomali Rahmonov', '3261', 'TJ'), +('TWN', 'Taiwan', 'Asia', 'Eastern Asia', '36188', '1945', '22256000', '76.400002', '256254.00', '263451.00', 'T’ai-wan', 'Republic', 'Chen Shui-bian', '3263', 'TW'), +('TZA', 'Tanzania', 'Africa', 'Eastern Africa', '883749', '1961', '33517000', '52.299999', '8005.00', '7388.00', 'Tanzania', 'Republic', 'Benjamin William Mkapa', '3306', 'TZ'), +('DNK', 'Denmark', 'Europe', 'Nordic Countries', '43094', '800', '5330000', '76.5', '174099.00', '169264.00', 'Danmark', 'Constitutional Monarchy', 'Margrethe II', '3315', 'DK'), +('THA', 'Thailand', 'Asia', 'Southeast Asia', '513115', '1350', '61399000', '68.599998', '116416.00', '153907.00', 'Prathet Thai', 'Constitutional Monarchy', 'Bhumibol Adulyadej', '3320', 'TH'), +('TGO', 'Togo', 'Africa', 'Western Africa', '56785', '1960', '4629000', '54.700001', '1449.00', '1400.00', 'Togo', 'Republic', 'Gnassingbé Eyadéma', '3332', 'TG'), +('TKL', 'Tokelau', 'Oceania', 'Polynesia', '12', NULL, '2000', NULL, '0.00', NULL, 'Tokelau', 'Nonmetropolitan Territory of New Zealand', 'Elisabeth II', '3333', 'TK'), +('TON', 'Tonga', 'Oceania', 'Polynesia', '650', '1970', '99000', '67.900002', '146.00', '170.00', 'Tonga', 'Monarchy', 'Taufa''ahau Tupou IV', '3334', 'TO'), +('TTO', 'Trinidad and Tobago', 'North America', 'Caribbean', '5130', '1962', '1295000', '68', '6232.00', '5867.00', 'Trinidad and Tobago', 'Republic', 'Arthur N. R. Robinson', '3336', 'TT'), +('TCD', 'Chad', 'Africa', 'Central Africa', '1284000', '1960', '7651000', '50.5', '1208.00', '1102.00', 'Tchad/Tshad', 'Republic', 'Idriss Déby', '3337', 'TD'), +('CZE', 'Czech Republic', 'Europe', 'Eastern Europe', '78866', '1993', '10278100', '74.5', '55017.00', '52037.00', '¸esko', 'Republic', 'Václav Havel', '3339', 'CZ'), +('TUN', 'Tunisia', 'Africa', 'Northern Africa', '163610', '1956', '9586000', '73.699997', '20026.00', '18898.00', 'Tunis/Tunisie', 'Republic', 'Zine al-Abidine Ben Ali', '3349', 'TN'), +('TUR', 'Turkey', 'Asia', 'Middle East', '774815', '1923', '66591000', '71', '210721.00', '189122.00', 'Türkiye', 'Republic', 'Ahmet Necdet Sezer', '3358', 'TR'), +('TKM', 'Turkmenistan', 'Asia', 'Southern and Central Asia', '488100', '1991', '4459000', '60.900002', '4397.00', '2000.00', 'Türkmenostan', 'Republic', 'Saparmurad Nijazov', '3419', 'TM'), +('TCA', 'Turks and Caicos Islands', 'North America', 'Caribbean', '430', NULL, '17000', '73.300003', '96.00', NULL, 'The Turks and Caicos Islands', 'Dependent Territory of the UK', 'Elisabeth II', '3423', 'TC'), +('TUV', 'Tuvalu', 'Oceania', 'Polynesia', '26', '1978', '12000', '66.300003', '6.00', NULL, 'Tuvalu', 'Constitutional Monarchy', 'Elisabeth II', '3424', 'TV'), +('UGA', 'Uganda', 'Africa', 'Eastern Africa', '241038', '1962', '21778000', '42.900002', '6313.00', '6887.00', 'Uganda', 'Republic', 'Yoweri Museveni', '3425', 'UG'), +('UKR', 'Ukraine', 'Europe', 'Eastern Europe', '603700', '1991', '50456000', '66', '42168.00', '49677.00', 'Ukrajina', 'Republic', 'Leonid Kutšma', '3426', 'UA'), +('HUN', 'Hungary', 'Europe', 'Eastern Europe', '93030', '1918', '10043200', '71.400002', '48267.00', '45914.00', 'Magyarország', 'Republic', 'Ferenc Mádl', '3483', 'HU'), +('URY', 'Uruguay', 'South America', 'South America', '175016', '1828', '3337000', '75.199997', '20831.00', '19967.00', 'Uruguay', 'Republic', 'Jorge Batlle Ibáńez', '3492', 'UY'), +('NCL', 'New Caledonia', 'Oceania', 'Melanesia', '18575', NULL, '214000', '72.800003', '3563.00', NULL, 'Nouvelle-Calédonie', 'Nonmetropolitan Territory of France', 'Jacques Chirac', '3493', 'NC'), +('NZL', 'New Zealand', 'Oceania', 'Australia and New Zealand', '270534', '1907', '3862000', '77.800003', '54669.00', '64960.00', 'New Zealand/Aotearoa', 'Constitutional Monarchy', 'Elisabeth II', '3499', 'NZ'), +('UZB', 'Uzbekistan', 'Asia', 'Southern and Central Asia', '447400', '1991', '24318000', '63.700001', '14194.00', '21300.00', 'Uzbekiston', 'Republic', 'Islam Karimov', '3503', 'UZ'), +('BLR', 'Belarus', 'Europe', 'Eastern Europe', '207600', '1991', '10236000', '68', '13714.00', NULL, 'Belarus', 'Republic', 'Aljaksandr Lukašenka', '3520', 'BY'), +('WLF', 'Wallis and Futuna', 'Oceania', 'Polynesia', '200', NULL, '15000', NULL, '0.00', NULL, 'Wallis-et-Futuna', 'Nonmetropolitan Territory of France', 'Jacques Chirac', '3536', 'WF'), +('VUT', 'Vanuatu', 'Oceania', 'Melanesia', '12189', '1980', '190000', '60.599998', '261.00', '246.00', 'Vanuatu', 'Republic', 'John Bani', '3537', 'VU'), +('VAT', 'Holy See (Vatican City State)', 'Europe', 'Southern Europe', '0.40000001', '1929', '1000', NULL, '9.00', NULL, 'Santa Sede/Cittŕ del Vaticano', 'Independent Church State', 'Johannes Paavali II', '3538', 'VA'), +('VEN', 'Venezuela', 'South America', 'South America', '912050', '1811', '24170000', '73.099998', '95023.00', '88434.00', 'Venezuela', 'Federal Republic', 'Hugo Chávez Frías', '3539', 'VE'), +('RUS', 'Russian Federation', 'Europe', 'Eastern Europe', '17075400', '1991', '146934000', '67.199997', '276608.00', '442989.00', 'Rossija', 'Federal Republic', 'Vladimir Putin', '3580', 'RU'), +('VNM', 'Vietnam', 'Asia', 'Southeast Asia', '331689', '1945', '79832000', '69.300003', '21929.00', '22834.00', 'Vięt Nam', 'Socialistic Republic', 'Trân Duc Luong', '3770', 'VN'), +('EST', 'Estonia', 'Europe', 'Baltic Countries', '45227', '1991', '1439200', '69.5', '5328.00', '3371.00', 'Eesti', 'Republic', 'Lennart Meri', '3791', 'EE'), +('USA', 'United States', 'North America', 'North America', '9363520', '1776', '278357000', '77.099998', '8510700.00', '8110900.00', 'United States', 'Federal Republic', 'George W. Bush', '3813', 'US'), +('VIR', 'Virgin Islands, U.S.', 'North America', 'Caribbean', '347', NULL, '93000', '78.099998', '0.00', NULL, 'Virgin Islands of the United States', 'US Territory', 'George W. Bush', '4067', 'VI'), +('ZWE', 'Zimbabwe', 'Africa', 'Eastern Africa', '390757', '1980', '11669000', '37.799999', '5951.00', '8670.00', 'Zimbabwe', 'Republic', 'Robert G. Mugabe', '4068', 'ZW'), +('PSE', 'Palestine', 'Asia', 'Middle East', '6257', NULL, '3101000', '71.400002', '4173.00', NULL, 'Filastin', 'Autonomous Area', 'Yasser (Yasir) Arafat', '4074', 'PS'), +('ATA', 'Antarctica', 'Antarctica', 'Antarctica', '13120000', NULL, '0', NULL, '0.00', NULL, '–', 'Co-administrated', '', NULL, 'AQ'), +('BVT', 'Bouvet Island', 'Antarctica', 'Antarctica', '59', NULL, '0', NULL, '0.00', NULL, 'Bouvetřya', 'Dependent Territory of Norway', 'Harald V', NULL, 'BV'), +('IOT', 'British Indian Ocean Territory', 'Africa', 'Eastern Africa', '78', NULL, '0', NULL, '0.00', NULL, 'British Indian Ocean Territory', 'Dependent Territory of the UK', 'Elisabeth II', NULL, 'IO'), +('SGS', 'South Georgia and the South Sandwich Islands', 'Antarctica', 'Antarctica', '3903', NULL, '0', NULL, '0.00', NULL, 'South Georgia and the South Sandwich Islands', 'Dependent Territory of the UK', 'Elisabeth II', NULL, 'GS'), +('HMD', 'Heard Island and McDonald Islands', 'Antarctica', 'Antarctica', '359', NULL, '0', NULL, '0.00', NULL, 'Heard and McDonald Islands', 'Territory of Australia', 'Elisabeth II', NULL, 'HM'), +('ATF', 'French Southern territories', 'Antarctica', 'Antarctica', '7780', NULL, '0', NULL, '0.00', NULL, 'Terres australes françaises', 'Nonmetropolitan Territory of France', 'Jacques Chirac', NULL, 'TF'), +('UMI', 'United States Minor Outlying Islands', 'Oceania', 'Micronesia/Caribbean', '16', NULL, '0', NULL, '0.00', NULL, 'United States Minor Outlying Islands', 'Dependent Territory of the US', 'George W. Bush', NULL, 'UM'); + +-- +-- Data for Name: countrylanguage; Type: TABLE DATA; Schema: public; Owner: chriskl +-- +INSERT INTO countrylanguage (countrycode, language, isofficial, percentage) VALUES +('AFG', 'Pashto', 1, '52.400002'), +('NLD', 'Dutch', 1, '95.599998'), +('ANT', 'Papiamento', 1, '86.199997'), +('ALB', 'Albaniana', 1, '97.900002'), +('DZA', 'Arabic', 1, '86'), +('ASM', 'Samoan', 1, '90.599998'), +('AND', 'Spanish', 0, '44.599998'), +('AGO', 'Ovimbundu', 0, '37.200001'), +('AIA', 'English', 1, '0'), +('ATG', 'Creole English', 0, '95.699997'), +('ARE', 'Arabic', 1, '42'), +('ARG', 'Spanish', 1, '96.800003'), +('ARM', 'Armenian', 1, '93.400002'), +('ABW', 'Papiamento', 0, '76.699997'), +('AUS', 'English', 1, '81.199997'), +('AZE', 'Azerbaijani', 1, '89'), +('BHS', 'Creole English', 0, '89.699997'), +('BHR', 'Arabic', 1, '67.699997'), +('BGD', 'Bengali', 1, '97.699997'), +('BRB', 'Bajan', 0, '95.099998'), +('BEL', 'Dutch', 1, '59.200001'), +('BLZ', 'English', 1, '50.799999'), +('BEN', 'Fon', 0, '39.799999'), +('BMU', 'English', 1, '100'), +('BTN', 'Dzongkha', 1, '50'), +('BOL', 'Spanish', 1, '87.699997'), +('BIH', 'Serbo-Croatian', 1, '99.199997'), +('BWA', 'Tswana', 0, '75.5'), +('BRA', 'Portuguese', 1, '97.5'), +('GBR', 'English', 1, '97.300003'), +('VGB', 'English', 1, '0'), +('BRN', 'Malay', 1, '45.5'), +('BGR', 'Bulgariana', 1, '83.199997'), +('BFA', 'Mossi', 0, '50.200001'), +('BDI', 'Kirundi', 1, '98.099998'), +('CYM', 'English', 1, '0'), +('CHL', 'Spanish', 1, '89.699997'), +('COK', 'Maori', 1, '0'), +('CRI', 'Spanish', 1, '97.5'), +('DJI', 'Somali', 0, '43.900002'), +('DMA', 'Creole English', 0, '100'), +('DOM', 'Spanish', 1, '98'), +('ECU', 'Spanish', 1, '93'), +('EGY', 'Arabic', 1, '98.800003'), +('SLV', 'Spanish', 1, '100'), +('ERI', 'Tigrinja', 1, '49.099998'), +('ESP', 'Spanish', 1, '74.400002'), +('ZAF', 'Zulu', 1, '22.700001'), +('ETH', 'Oromo', 0, '31'), +('FLK', 'English', 1, '0'), +('FJI', 'Fijian', 1, '50.799999'), +('PHL', 'Pilipino', 1, '29.299999'), +('FRO', 'Faroese', 1, '100'), +('GAB', 'Fang', 0, '35.799999'), +('GMB', 'Malinke', 0, '34.099998'), +('GEO', 'Georgiana', 1, '71.699997'), +('GHA', 'Akan', 0, '52.400002'), +('GIB', 'English', 1, '88.900002'), +('GRD', 'Creole English', 0, '100'), +('GRL', 'Greenlandic', 1, '87.5'), +('GLP', 'Creole French', 0, '95'), +('GUM', 'English', 1, '37.5'), +('GTM', 'Spanish', 1, '64.699997'), +('GIN', 'Ful', 0, '38.599998'), +('GNB', 'Crioulo', 0, '36.400002'), +('GUY', 'Creole English', 0, '96.400002'), +('HTI', 'Haiti Creole', 0, '100'), +('HND', 'Spanish', 1, '97.199997'), +('HKG', 'Canton Chinese', 0, '88.699997'), +('SJM', 'Norwegian', 1, '0'), +('IDN', 'Javanese', 0, '39.400002'), +('IND', 'Hindi', 1, '39.900002'), +('IRQ', 'Arabic', 1, '77.199997'), +('IRN', 'Persian', 1, '45.700001'), +('IRL', 'English', 1, '98.400002'), +('ISL', 'Icelandic', 1, '95.699997'), +('ISR', 'Hebrew', 1, '63.099998'), +('ITA', 'Italian', 1, '94.099998'), +('TMP', 'Sunda', 0, '0'), +('AUT', 'German', 1, '92'), +('JAM', 'Creole English', 0, '94.199997'), +('JPN', 'Japanese', 1, '99.099998'), +('YEM', 'Arabic', 1, '99.599998'), +('JOR', 'Arabic', 1, '97.900002'), +('CXR', 'Chinese', 0, '0'), +('YUG', 'Serbo-Croatian', 1, '75.199997'), +('KHM', 'Khmer', 1, '88.599998'), +('CMR', 'Fang', 0, '19.700001'), +('CAN', 'English', 1, '60.400002'), +('CPV', 'Crioulo', 0, '100'), +('KAZ', 'Kazakh', 1, '46'), +('KEN', 'Kikuyu', 0, '20.9'), +('CAF', 'Gbaya', 0, '23.799999'), +('CHN', 'Chinese', 1, '92'), +('KGZ', 'Kirgiz', 1, '59.700001'), +('KIR', 'Kiribati', 1, '98.900002'), +('COL', 'Spanish', 1, '99'), +('COM', 'Comorian', 1, '75'), +('COG', 'Kongo', 0, '51.5'), +('COD', 'Luba', 0, '18'), +('CCK', 'Malay', 0, '0'), +('PRK', 'Korean', 1, '99.900002'), +('KOR', 'Korean', 1, '99.900002'), +('GRC', 'Greek', 1, '98.5'), +('HRV', 'Serbo-Croatian', 1, '95.900002'), +('CUB', 'Spanish', 1, '100'), +('KWT', 'Arabic', 1, '78.099998'), +('CYP', 'Greek', 1, '74.099998'), +('LAO', 'Lao', 1, '67.199997'), +('LVA', 'Latvian', 1, '55.099998'), +('LSO', 'Sotho', 1, '85'), +('LBN', 'Arabic', 1, '93'), +('LBR', 'Kpelle', 0, '19.5'), +('LBY', 'Arabic', 1, '96'), +('LIE', 'German', 1, '89'), +('LTU', 'Lithuanian', 1, '81.599998'), +('LUX', 'Luxembourgish', 1, '64.400002'), +('ESH', 'Arabic', 1, '100'), +('MAC', 'Canton Chinese', 0, '85.599998'), +('MDG', 'Malagasy', 1, '98.900002'), +('MKD', 'Macedonian', 1, '66.5'), +('MWI', 'Chichewa', 1, '58.299999'), +('MDV', 'Dhivehi', 1, '100'), +('MYS', 'Malay', 1, '58.400002'), +('MLI', 'Bambara', 0, '31.799999'), +('MLT', 'Maltese', 1, '95.800003'), +('MAR', 'Arabic', 1, '65'), +('MHL', 'Marshallese', 1, '96.800003'), +('MTQ', 'Creole French', 0, '96.599998'), +('MRT', 'Hassaniya', 0, '81.699997'), +('MUS', 'Creole French', 0, '70.599998'), +('MYT', 'Mahoré', 0, '41.900002'), +('MEX', 'Spanish', 1, '92.099998'), +('FSM', 'Trukese', 0, '41.599998'), +('MDA', 'Romanian', 1, '61.900002'), +('MCO', 'French', 1, '41.900002'), +('MNG', 'Mongolian', 1, '78.800003'), +('MSR', 'English', 1, '0'), +('MOZ', 'Makua', 0, '27.799999'), +('MMR', 'Burmese', 1, '69'), +('NAM', 'Ovambo', 0, '50.700001'), +('NRU', 'Nauru', 1, '57.5'), +('NPL', 'Nepali', 1, '50.400002'), +('NIC', 'Spanish', 1, '97.599998'), +('NER', 'Hausa', 0, '53.099998'), +('NGA', 'Joruba', 0, '21.4'), +('NIU', 'Niue', 0, '0'), +('NFK', 'English', 1, '0'), +('NOR', 'Norwegian', 1, '96.599998'), +('CIV', 'Akan', 0, '30'), +('OMN', 'Arabic', 1, '76.699997'), +('PAK', 'Punjabi', 0, '48.200001'), +('PLW', 'Palau', 1, '82.199997'), +('PAN', 'Spanish', 1, '76.800003'), +('PNG', 'Papuan Languages', 0, '78.099998'), +('PRY', 'Spanish', 1, '55.099998'), +('PER', 'Spanish', 1, '79.800003'), +('PCN', 'Pitcairnese', 0, '0'), +('MNP', 'Philippene Languages', 0, '34.099998'), +('PRT', 'Portuguese', 1, '99'), +('PRI', 'Spanish', 1, '51.299999'), +('POL', 'Polish', 1, '97.599998'), +('GNQ', 'Fang', 0, '84.800003'), +('QAT', 'Arabic', 1, '40.700001'), +('FRA', 'French', 1, '93.599998'), +('GUF', 'Creole French', 0, '94.300003'), +('PYF', 'Tahitian', 0, '46.400002'), +('REU', 'Creole French', 0, '91.5'), +('ROM', 'Romanian', 1, '90.699997'), +('RWA', 'Rwanda', 1, '100'), +('SWE', 'Swedish', 1, '89.5'), +('SHN', 'English', 1, '0'), +('KNA', 'Creole English', 0, '100'), +('LCA', 'Creole French', 0, '80'), +('VCT', 'Creole English', 0, '99.099998'), +('SPM', 'French', 1, '0'), +('DEU', 'German', 1, '91.300003'), +('SLB', 'Malenasian Languages', 0, '85.599998'), +('ZMB', 'Bemba', 0, '29.700001'), +('WSM', 'Samoan-English', 0, '52'), +('SMR', 'Italian', 1, '100'), +('STP', 'Crioulo', 0, '86.300003'), +('SAU', 'Arabic', 1, '95'), +('SEN', 'Wolof', 1, '48.099998'), +('SYC', 'Seselwa', 0, '91.300003'), +('SLE', 'Mende', 0, '34.799999'), +('SGP', 'Chinese', 1, '77.099998'), +('SVK', 'Slovak', 1, '85.599998'), +('SVN', 'Slovene', 1, '87.900002'), +('SOM', 'Somali', 1, '98.300003'), +('LKA', 'Singali', 1, '60.299999'), +('SDN', 'Arabic', 1, '49.400002'), +('FIN', 'Finnish', 1, '92.699997'), +('SUR', 'Sranantonga', 0, '81'), +('SWZ', 'Swazi', 1, '89.900002'), +('CHE', 'German', 1, '63.599998'), +('SYR', 'Arabic', 1, '90'), +('TJK', 'Tadzhik', 1, '62.200001'), +('TWN', 'Min', 0, '66.699997'), +('TZA', 'Nyamwesi', 0, '21.1'), +('DNK', 'Danish', 1, '93.5'), +('THA', 'Thai', 1, '52.599998'), +('TGO', 'Ewe', 1, '23.200001'), +('TKL', 'Tokelau', 0, '0'), +('TON', 'Tongan', 1, '98.300003'), +('TTO', 'English', 0, '93.5'), +('TCD', 'Sara', 0, '27.700001'), +('CZE', 'Czech', 1, '81.199997'), +('TUN', 'Arabic', 1, '69.900002'), +('TUR', 'Turkish', 1, '87.599998'), +('TKM', 'Turkmenian', 1, '76.699997'), +('TCA', 'English', 1, '0'), +('TUV', 'Tuvalu', 1, '92.5'), +('UGA', 'Ganda', 0, '18.1'), +('UKR', 'Ukrainian', 1, '64.699997'), +('HUN', 'Hungarian', 1, '98.5'), +('URY', 'Spanish', 1, '95.699997'), +('NCL', 'Malenasian Languages', 0, '45.400002'), +('NZL', 'English', 1, '87'), +('UZB', 'Uzbek', 1, '72.599998'), +('BLR', 'Belorussian', 1, '65.599998'), +('WLF', 'Wallis', 0, '0'), +('VUT', 'Bislama', 1, '56.599998'), +('VAT', 'Italian', 1, '0'), +('VEN', 'Spanish', 1, '96.900002'), +('RUS', 'Russian', 1, '86.599998'), +('VNM', 'Vietnamese', 1, '86.800003'), +('EST', 'Estonian', 1, '65.300003'), +('USA', 'English', 1, '86.199997'), +('VIR', 'English', 1, '81.699997'), +('UMI', 'English', 1, '0'), +('ZWE', 'Shona', 0, '72.099998'), +('PSE', 'Arabic', 0, '95.900002'), +('AFG', 'Dari', 1, '32.099998'), +('NLD', 'Fries', 0, '3.7'), +('ANT', 'English', 0, '7.8000002'), +('ALB', 'Greek', 0, '1.8'), +('DZA', 'Berberi', 0, '14'), +('ASM', 'English', 1, '3.0999999'), +('AND', 'Catalan', 1, '32.299999'), +('AGO', 'Mbundu', 0, '21.6'), +('ATG', 'English', 1, '0'), +('ARE', 'Hindi', 0, '0'), +('ARG', 'Italian', 0, '1.7'), +('ARM', 'Azerbaijani', 0, '2.5999999'), +('ABW', 'English', 0, '9.5'), +('AUS', 'Italian', 0, '2.2'), +('AZE', 'Russian', 0, '3'), +('BHS', 'Creole French', 0, '10.3'), +('BHR', 'English', 0, '0'), +('BGD', 'Chakma', 0, '0.40000001'), +('BRB', 'English', 1, '0'), +('BEL', 'French', 1, '32.599998'), +('BLZ', 'Spanish', 0, '31.6'), +('BEN', 'Joruba', 0, '12.2'), +('BTN', 'Nepali', 0, '34.799999'), +('BOL', 'Ketšua', 1, '8.1000004'), +('BWA', 'Shona', 0, '12.3'), +('BRA', 'German', 0, '0.5'), +('GBR', 'Kymri', 0, '0.89999998'), +('BRN', 'Malay-English', 0, '28.799999'), +('BGR', 'Turkish', 0, '9.3999996'), +('BFA', 'Ful', 0, '9.6999998'), +('BDI', 'French', 1, '0'), +('CHL', 'Araucan', 0, '9.6000004'), +('COK', 'English', 0, '0'), +('CRI', 'Creole English', 0, '2'), +('DJI', 'Afar', 0, '34.799999'), +('DMA', 'Creole French', 0, '0'), +('DOM', 'Creole French', 0, '2'), +('ECU', 'Ketšua', 0, '7'), +('EGY', 'Sinaberberi', 0, '0'), +('SLV', 'Nahua', 0, '0'), +('ERI', 'Tigre', 0, '31.700001'), +('ESP', 'Catalan', 0, '16.9'), +('ZAF', 'Xhosa', 1, '17.700001'), +('ETH', 'Amhara', 0, '30'), +('FJI', 'Hindi', 0, '43.700001'), +('PHL', 'Cebuano', 0, '23.299999'), +('FRO', 'Danish', 1, '0'), +('GAB', 'Punu-sira-nzebi', 0, '17.1'), +('GMB', 'Ful', 0, '16.200001'), +('GEO', 'Russian', 0, '8.8000002'), +('GHA', 'Mossi', 0, '15.8'), +('GIB', 'Arabic', 0, '7.4000001'), +('GRL', 'Danish', 1, '12.5'), +('GLP', 'French', 1, '0'), +('GUM', 'Chamorro', 1, '29.6'), +('GTM', 'Quiché', 0, '10.1'), +('GIN', 'Malinke', 0, '23.200001'), +('GNB', 'Ful', 0, '16.6'), +('GUY', 'Caribbean', 0, '2.2'), +('HTI', 'French', 1, '0'), +('HND', 'Garifuna', 0, '1.3'), +('HKG', 'English', 1, '2.2'), +('SJM', 'Russian', 0, '0'), +('IDN', 'Sunda', 0, '15.8'), +('IND', 'Bengali', 0, '8.1999998'), +('IRQ', 'Kurdish', 0, '19'), +('IRN', 'Azerbaijani', 0, '16.799999'), +('IRL', 'Irish', 1, '1.6'), +('ISL', 'English', 0, '0'), +('ISR', 'Arabic', 1, '18'), +('ITA', 'Sardinian', 0, '2.7'), +('TMP', 'Portuguese', 1, '0'), +('AUT', 'Serbo-Croatian', 0, '2.2'), +('JAM', 'Hindi', 0, '1.9'), +('JPN', 'Korean', 0, '0.5'), +('YEM', 'Soqutri', 0, '0'), +('JOR', 'Circassian', 0, '1'), +('CXR', 'English', 1, '0'), +('YUG', 'Albaniana', 0, '16.5'), +('KHM', 'Vietnamese', 0, '5.5'), +('CMR', 'Bamileke-bamum', 0, '18.6'), +('CAN', 'French', 1, '23.4'), +('CPV', 'Portuguese', 1, '0'), +('KAZ', 'Russian', 0, '34.700001'), +('KEN', 'Luhya', 0, '13.8'), +('CAF', 'Banda', 0, '23.5'), +('CHN', 'Zhuang', 0, '1.4'), +('KGZ', 'Russian', 1, '16.200001'), +('KIR', 'Tuvalu', 0, '0.5'), +('COL', 'Chibcha', 0, '0.40000001'), +('COM', 'Comorian-French', 0, '12.9'), +('COG', 'Teke', 0, '17.299999'), +('COD', 'Kongo', 0, '16'), +('CCK', 'English', 1, '0'), +('PRK', 'Chinese', 0, '0.1'), +('KOR', 'Chinese', 0, '0.1'), +('GRC', 'Turkish', 0, '0.89999998'), +('HRV', 'Slovene', 0, '0'), +('KWT', 'English', 0, '0'), +('CYP', 'Turkish', 1, '22.4'), +('LAO', 'Mon-khmer', 0, '16.5'), +('LVA', 'Russian', 0, '32.5'), +('LSO', 'Zulu', 0, '15'), +('LBN', 'Armenian', 0, '5.9000001'), +('LBR', 'Bassa', 0, '13.7'), +('LBY', 'Berberi', 0, '1'), +('LIE', 'Italian', 0, '2.5'), +('LTU', 'Russian', 0, '8.1000004'), +('LUX', 'Portuguese', 0, '13'), +('MAC', 'Portuguese', 1, '2.3'), +('MDG', 'French', 1, '0'), +('MKD', 'Albaniana', 0, '22.9'), +('MWI', 'Lomwe', 0, '18.4'), +('MDV', 'English', 0, '0'), +('MYS', 'Chinese', 0, '9'), +('MLI', 'Ful', 0, '13.9'), +('MLT', 'English', 1, '2.0999999'), +('MAR', 'Berberi', 0, '33'), +('MHL', 'English', 1, '0'), +('MTQ', 'French', 1, '0'), +('MRT', 'Wolof', 0, '6.5999999'), +('MUS', 'Bhojpuri', 0, '21.1'), +('MYT', 'French', 1, '20.299999'), +('MEX', 'Náhuatl', 0, '1.8'), +('FSM', 'Pohnpei', 0, '23.799999'), +('MDA', 'Russian', 0, '23.200001'), +('MCO', 'Monegasque', 0, '16.1'), +('MNG', 'Kazakh', 0, '5.9000001'), +('MOZ', 'Tsonga', 0, '12.4'), +('MMR', 'Shan', 0, '8.5'), +('NAM', 'Nama', 0, '12.4'), +('NRU', 'Kiribati', 0, '17.9'), +('NPL', 'Maithili', 0, '11.9'), +('NIC', 'Miskito', 0, '1.6'), +('NER', 'Songhai-zerma', 0, '21.200001'), +('NGA', 'Hausa', 0, '21.1'), +('NIU', 'English', 1, '0'), +('NOR', 'English', 0, '0.5'), +('CIV', 'Gur', 0, '11.7'), +('OMN', 'Balochi', 0, '0'), +('PAK', 'Pashto', 0, '13.1'), +('PLW', 'Philippene Languages', 0, '9.1999998'), +('PAN', 'Creole English', 0, '14'), +('PNG', 'Malenasian Languages', 0, '20'), +('PRY', 'Guaraní', 1, '40.099998'), +('PER', 'Ketšua', 1, '16.4'), +('MNP', 'Chamorro', 0, '30'), +('PRI', 'English', 0, '47.400002'), +('POL', 'German', 0, '1.3'), +('GNQ', 'Bubi', 0, '8.6999998'), +('QAT', 'Urdu', 0, '0'), +('FRA', 'Arabic', 0, '2.5'), +('GUF', 'Indian Languages', 0, '1.9'), +('PYF', 'French', 1, '40.799999'), +('REU', 'Chinese', 0, '2.8'), +('ROM', 'Hungarian', 0, '7.1999998'), +('RWA', 'French', 1, '0'), +('SWE', 'Finnish', 0, '2.4000001'), +('KNA', 'English', 1, '0'), +('LCA', 'English', 1, '20'), +('VCT', 'English', 1, '0'), +('DEU', 'Turkish', 0, '2.5999999'), +('SLB', 'Papuan Languages', 0, '8.6000004'), +('ZMB', 'Tongan', 0, '11'), +('WSM', 'Samoan', 1, '47.5'), +('STP', 'French', 0, '0.69999999'), +('SEN', 'Ful', 0, '21.700001'), +('SYC', 'English', 1, '3.8'), +('SLE', 'Temne', 0, '31.799999'), +('SGP', 'Malay', 1, '14.1'), +('SVK', 'Hungarian', 0, '10.5'), +('SVN', 'Serbo-Croatian', 0, '7.9000001'), +('SOM', 'Arabic', 1, '0'), +('LKA', 'Tamil', 1, '19.6'), +('SDN', 'Dinka', 0, '11.5'), +('FIN', 'Swedish', 1, '5.6999998'), +('SUR', 'Hindi', 0, '0'), +('SWZ', 'Zulu', 0, '2'), +('CHE', 'French', 1, '19.200001'), +('SYR', 'Kurdish', 0, '9'), +('TJK', 'Uzbek', 0, '23.200001'), +('TWN', 'Mandarin Chinese', 1, '20.1'), +('TZA', 'Swahili', 1, '8.8000002'), +('DNK', 'Turkish', 0, '0.80000001'), +('THA', 'Lao', 0, '26.9'), +('TGO', 'Kabyé', 1, '13.8'), +('TKL', 'English', 1, '0'), +('TON', 'English', 1, '0'), +('TTO', 'Hindi', 0, '3.4000001'), +('TCD', 'Arabic', 1, '12.3'), +('CZE', 'Moravian', 0, '12.9'), +('TUN', 'Arabic-French', 0, '26.299999'), +('TUR', 'Kurdish', 0, '10.6'), +('TKM', 'Uzbek', 0, '9.1999998'), +('TUV', 'Kiribati', 0, '7.5'), +('UGA', 'Nkole', 0, '10.7'), +('UKR', 'Russian', 0, '32.900002'), +('HUN', 'Romani', 0, '0.5'), +('NCL', 'French', 1, '34.299999'), +('NZL', 'Maori', 0, '4.3000002'), +('UZB', 'Russian', 0, '10.9'), +('BLR', 'Russian', 1, '32'), +('WLF', 'Futuna', 0, '0'), +('VUT', 'English', 1, '28.299999'), +('VEN', 'Goajiro', 0, '0.40000001'), +('RUS', 'Tatar', 0, '3.2'), +('VNM', 'Tho', 0, '1.8'), +('EST', 'Russian', 0, '27.799999'), +('USA', 'Spanish', 0, '7.5'), +('VIR', 'Spanish', 0, '13.3'), +('ZWE', 'Ndebele', 0, '16.200001'), +('PSE', 'Hebrew', 0, '4.0999999'), +('AFG', 'Uzbek', 0, '8.8000002'), +('NLD', 'Arabic', 0, '0.89999998'), +('ANT', 'Dutch', 1, '0'), +('ALB', 'Macedonian', 0, '0.1'), +('ASM', 'Tongan', 0, '3.0999999'), +('AND', 'Portuguese', 0, '10.8'), +('AGO', 'Kongo', 0, '13.2'), +('ARG', 'Indian Languages', 0, '0.30000001'), +('ABW', 'Spanish', 0, '7.4000001'), +('AUS', 'Greek', 0, '1.6'), +('AZE', 'Lezgian', 0, '2.3'), +('BGD', 'Marma', 0, '0.2'), +('BEL', 'Italian', 0, '2.4000001'), +('BLZ', 'Maya Languages', 0, '9.6000004'), +('BEN', 'Adja', 0, '11.1'), +('BTN', 'Asami', 0, '15.2'), +('BOL', 'Aimará', 1, '3.2'), +('BWA', 'San', 0, '3.5'), +('BRA', 'Italian', 0, '0.40000001'), +('GBR', 'Gaeli', 0, '0.1'), +('BRN', 'Chinese', 0, '9.3000002'), +('BGR', 'Romani', 0, '3.7'), +('BFA', 'Gurma', 0, '5.6999998'), +('BDI', 'Swahili', 0, '0'), +('CHL', 'Aimará', 0, '0.5'), +('CRI', 'Chibcha', 0, '0.30000001'), +('DJI', 'Arabic', 1, '10.6'), +('ERI', 'Afar', 0, '4.3000002'), +('ESP', 'Galecian', 0, '6.4000001'), +('ZAF', 'Afrikaans', 1, '14.3'), +('ETH', 'Tigrinja', 0, '7.1999998'), +('PHL', 'Ilocano', 0, '9.3000002'), +('GAB', 'Mpongwe', 0, '14.6'), +('GMB', 'Wolof', 0, '12.6'), +('GEO', 'Armenian', 0, '6.8000002'), +('GHA', 'Ewe', 0, '11.9'), +('GUM', 'Philippene Languages', 0, '19.700001'), +('GTM', 'Cakchiquel', 0, '8.8999996'), +('GIN', 'Susu', 0, '11'), +('GNB', 'Balante', 0, '14.6'), +('GUY', 'Arawakan', 0, '1.4'), +('HND', 'Creole English', 0, '0.2'), +('HKG', 'Fukien', 0, '1.9'), +('IDN', 'Malay', 1, '12.1'), +('IND', 'Telugu', 0, '7.8000002'), +('IRQ', 'Azerbaijani', 0, '1.7'), +('IRN', 'Kurdish', 0, '9.1000004'), +('ISR', 'Russian', 0, '8.8999996'), +('ITA', 'Friuli', 0, '1.2'), +('AUT', 'Turkish', 0, '1.5'), +('JPN', 'Chinese', 0, '0.2'), +('JOR', 'Armenian', 0, '1'), +('YUG', 'Hungarian', 0, '3.4000001'), +('KHM', 'Chinese', 0, '3.0999999'), +('CMR', 'Duala', 0, '10.9'), +('CAN', 'Chinese', 0, '2.5'), +('KAZ', 'Ukrainian', 0, '5'), +('KEN', 'Luo', 0, '12.8'), +('CAF', 'Mandjia', 0, '14.8'), +('CHN', 'Mantšu', 0, '0.89999998'), +('KGZ', 'Uzbek', 0, '14.1'), +('COL', 'Creole English', 0, '0.1'), +('COM', 'Comorian-madagassi', 0, '5.5'), +('COG', 'Mboshi', 0, '11.4'), +('COD', 'Mongo', 0, '13.5'), +('LAO', 'Thai', 0, '7.8000002'), +('LVA', 'Belorussian', 0, '4.0999999'), +('LSO', 'English', 1, '0'), +('LBN', 'French', 0, '0'), +('LBR', 'Grebo', 0, '8.8999996'), +('LIE', 'Turkish', 0, '2.5'), +('LTU', 'Polish', 0, '7'), +('LUX', 'Italian', 0, '4.5999999'), +('MAC', 'Mandarin Chinese', 0, '1.2'), +('MKD', 'Turkish', 0, '4'), +('MWI', 'Yao', 0, '13.2'), +('MYS', 'Tamil', 0, '3.9000001'), +('MLI', 'Senufo and Minianka', 0, '12'), +('MRT', 'Tukulor', 0, '5.4000001'), +('MUS', 'French', 0, '3.4000001'), +('MYT', 'Malagasy', 0, '16.1'), +('MEX', 'Yucatec', 0, '1.1'), +('FSM', 'Mortlock', 0, '7.5999999'), +('MDA', 'Ukrainian', 0, '8.6000004'), +('MCO', 'Italian', 0, '16.1'), +('MNG', 'Dorbet', 0, '2.7'), +('MOZ', 'Sena', 0, '9.3999996'), +('MMR', 'Karen', 0, '6.1999998'), +('NAM', 'Kavango', 0, '9.6999998'), +('NRU', 'Chinese', 0, '8.5'), +('NPL', 'Bhojpuri', 0, '7.5'), +('NIC', 'Creole English', 0, '0.5'), +('NER', 'Tamashek', 0, '10.4'), +('NGA', 'Ibo', 0, '18.1'), +('NOR', 'Danish', 0, '0.40000001'), +('CIV', 'Malinke', 0, '11.4'), +('PAK', 'Sindhi', 0, '11.8'), +('PLW', 'English', 1, '3.2'), +('PAN', 'Guaymí', 0, '5.3000002'), +('PRY', 'Portuguese', 0, '3.2'), +('PER', 'Aimará', 1, '2.3'), +('MNP', 'Chinese', 0, '7.0999999'), +('POL', 'Ukrainian', 0, '0.60000002'), +('FRA', 'Portuguese', 0, '1.2'), +('PYF', 'Chinese', 0, '2.9000001'), +('REU', 'Comorian', 0, '2.8'), +('ROM', 'Romani', 1, '0.69999999'), +('SWE', 'Southern Slavic Languages', 0, '1.3'), +('DEU', 'Southern Slavic Languages', 0, '1.4'), +('SLB', 'Polynesian Languages', 0, '3.8'), +('ZMB', 'Nyanja', 0, '7.8000002'), +('WSM', 'English', 1, '0.60000002'), +('SEN', 'Serer', 0, '12.5'), +('SYC', 'French', 1, '1.3'), +('SLE', 'Limba', 0, '8.3000002'), +('SGP', 'Tamil', 1, '7.4000001'), +('SVK', 'Romani', 0, '1.7'), +('SVN', 'Hungarian', 0, '0.5'), +('LKA', 'Mixed Languages', 0, '19.6'), +('SDN', 'Nubian Languages', 0, '8.1000004'), +('FIN', 'Russian', 0, '0.40000001'), +('CHE', 'Italian', 1, '7.6999998'), +('TJK', 'Russian', 0, '9.6999998'), +('TWN', 'Hakka', 0, '11'), +('TZA', 'Hehet', 0, '6.9000001'), +('DNK', 'Arabic', 0, '0.69999999'), +('THA', 'Chinese', 0, '12.1'), +('TGO', 'Watyi', 0, '10.3'), +('TTO', 'Creole English', 0, '2.9000001'), +('TCD', 'Mayo-kebbi', 0, '11.5'), +('CZE', 'Slovak', 0, '3.0999999'), +('TUN', 'Arabic-French-English', 0, '3.2'), +('TUR', 'Arabic', 0, '1.4'), +('TKM', 'Russian', 0, '6.6999998'), +('TUV', 'English', 1, '0'), +('UGA', 'Kiga', 0, '8.3000002'), +('UKR', 'Romanian', 0, '0.69999999'), +('HUN', 'German', 0, '0.40000001'), +('NCL', 'Polynesian Languages', 0, '11.6'), +('UZB', 'Tadzhik', 0, '4.4000001'), +('BLR', 'Ukrainian', 0, '1.3'), +('VUT', 'French', 1, '14.2'), +('VEN', 'Warrau', 0, '0.1'), +('RUS', 'Ukrainian', 0, '1.3'), +('VNM', 'Thai', 0, '1.6'), +('EST', 'Ukrainian', 0, '2.8'), +('USA', 'French', 0, '0.69999999'), +('VIR', 'French', 0, '2.5'), +('ZWE', 'English', 1, '2.2'), +('AFG', 'Turkmenian', 0, '1.9'), +('NLD', 'Turkish', 0, '0.80000001'), +('AND', 'French', 0, '6.1999998'), +('AGO', 'Luimbe-nganguela', 0, '5.4000001'), +('ABW', 'Dutch', 1, '5.3000002'), +('AUS', 'Canton Chinese', 0, '1.1'), +('AZE', 'Armenian', 0, '2'), +('BGD', 'Garo', 0, '0.1'), +('BEL', 'Arabic', 0, '1.6'), +('BLZ', 'Garifuna', 0, '6.8000002'), +('BEN', 'Aizo', 0, '8.6999998'), +('BOL', 'Guaraní', 0, '0.1'), +('BWA', 'Khoekhoe', 0, '2.5'), +('BRA', 'Japanese', 0, '0.40000001'), +('BRN', 'English', 0, '3.0999999'), +('BGR', 'Macedonian', 0, '2.5999999'), +('BFA', 'Busansi', 0, '3.5'), +('CHL', 'Rapa nui', 0, '0.2'), +('CRI', 'Chinese', 0, '0.2'), +('ERI', 'Hadareb', 0, '3.8'), +('ESP', 'Basque', 0, '1.6'), +('ZAF', 'Northsotho', 0, '9.1000004'), +('ETH', 'Gurage', 0, '4.6999998'), +('PHL', 'Hiligaynon', 0, '9.1000004'), +('GAB', 'Mbete', 0, '13.8'), +('GMB', 'Diola', 0, '9.1999998'), +('GEO', 'Azerbaijani', 0, '5.5'), +('GHA', 'Ga-adangme', 0, '7.8000002'), +('GUM', 'Korean', 0, '3.3'), +('GTM', 'Kekchí', 0, '4.9000001'), +('GIN', 'Kissi', 0, '6'), +('GNB', 'Portuguese', 1, '8.1000004'), +('HND', 'Miskito', 0, '0.2'), +('HKG', 'Hakka', 0, '1.6'), +('IDN', 'Madura', 0, '4.3000002'), +('IND', 'Marathi', 0, '7.4000001'), +('IRQ', 'Assyrian', 0, '0.80000001'), +('IRN', 'Gilaki', 0, '5.3000002'), +('ITA', 'French', 0, '0.5'), +('AUT', 'Hungarian', 0, '0.40000001'), +('JPN', 'English', 0, '0.1'), +('YUG', 'Romani', 0, '1.4'), +('KHM', 'Tšam', 0, '2.4000001'), +('CMR', 'Ful', 0, '9.6000004'), +('CAN', 'Italian', 0, '1.7'), +('KAZ', 'German', 0, '3.0999999'), +('KEN', 'Kamba', 0, '11.2'), +('CAF', 'Ngbaka', 0, '7.5'), +('CHN', 'Hui', 0, '0.80000001'), +('KGZ', 'Ukrainian', 0, '1.7'), +('COL', 'Arawakan', 0, '0.1'), +('COM', 'Comorian-Arabic', 0, '1.6'), +('COG', 'Mbete', 0, '4.8000002'), +('COD', 'Rwanda', 0, '10.3'), +('LAO', 'Lao-Soung', 0, '5.1999998'), +('LVA', 'Ukrainian', 0, '2.9000001'), +('LBR', 'Gio', 0, '7.9000001'), +('LTU', 'Belorussian', 0, '1.4'), +('LUX', 'French', 1, '4.1999998'), +('MAC', 'English', 0, '0.5'), +('MKD', 'Romani', 0, '2.3'), +('MWI', 'Ngoni', 0, '6.6999998'), +('MYS', 'Iban', 0, '2.8'), +('MLI', 'Soninke', 0, '8.6999998'), +('MRT', 'Soninke', 0, '2.7'), +('MUS', 'Hindi', 0, '1.2'), +('MEX', 'Zapotec', 0, '0.60000002'), +('FSM', 'Kosrean', 0, '7.3000002'), +('MDA', 'Gagauzi', 0, '3.2'), +('MCO', 'English', 0, '6.5'), +('MNG', 'Bajad', 0, '1.9'), +('MOZ', 'Lomwe', 0, '7.8000002'), +('MMR', 'Rakhine', 0, '4.5'), +('NAM', 'Afrikaans', 0, '9.5'), +('NRU', 'Tuvalu', 0, '8.5'), +('NPL', 'Tharu', 0, '5.4000001'), +('NIC', 'Sumo', 0, '0.2'), +('NER', 'Ful', 0, '9.6999998'), +('NGA', 'Ful', 0, '11.3'), +('NOR', 'Swedish', 0, '0.30000001'), +('CIV', 'Kru', 0, '10.5'), +('PAK', 'Saraiki', 0, '9.8000002'), +('PLW', 'Chinese', 0, '1.6'), +('PAN', 'Cuna', 0, '2'), +('PRY', 'German', 0, '0.89999998'), +('MNP', 'Korean', 0, '6.5'), +('POL', 'Belorussian', 0, '0.5'), +('FRA', 'Italian', 0, '0.40000001'), +('REU', 'Malagasy', 0, '1.4'), +('ROM', 'German', 0, '0.40000001'), +('SWE', 'Arabic', 0, '0.80000001'), +('DEU', 'Italian', 0, '0.69999999'), +('ZMB', 'Lozi', 0, '6.4000001'), +('SEN', 'Diola', 0, '5'), +('SLE', 'Kono-vai', 0, '5.0999999'), +('SVK', 'Czech and Moravian', 0, '1.1'), +('SDN', 'Beja', 0, '6.4000001'), +('FIN', 'Estonian', 0, '0.2'), +('CHE', 'Romansh', 1, '0.60000002'), +('TWN', 'Ami', 0, '0.60000002'), +('TZA', 'Haya', 0, '5.9000001'), +('DNK', 'German', 0, '0.5'), +('THA', 'Malay', 0, '3.5999999'), +('TGO', 'Kotokoli', 0, '5.6999998'), +('TCD', 'Kanem-bornu', 0, '9'), +('CZE', 'Polish', 0, '0.60000002'), +('TKM', 'Kazakh', 0, '2'), +('UGA', 'Soga', 0, '8.1999998'), +('UKR', 'Bulgariana', 0, '0.30000001'), +('HUN', 'Serbo-Croatian', 0, '0.2'), +('UZB', 'Kazakh', 0, '3.8'), +('BLR', 'Polish', 0, '0.60000002'), +('RUS', 'Chuvash', 0, '0.89999998'), +('VNM', 'Muong', 0, '1.5'), +('EST', 'Belorussian', 0, '1.4'), +('USA', 'German', 0, '0.69999999'), +('ZWE', 'Nyanja', 0, '2.2'), +('AFG', 'Balochi', 0, '0.89999998'), +('AGO', 'Nyaneka-nkhumbi', 0, '5.4000001'), +('AUS', 'Arabic', 0, '1'), +('BGD', 'Khasi', 0, '0.1'), +('BEL', 'German', 1, '1'), +('BEN', 'Bariba', 0, '8.6999998'), +('BWA', 'Ndebele', 0, '1.3'), +('BRA', 'Indian Languages', 0, '0.2'), +('BFA', 'Dagara', 0, '3.0999999'), +('ERI', 'Bilin', 0, '3'), +('ZAF', 'English', 1, '8.5'), +('ETH', 'Somali', 0, '4.0999999'), +('PHL', 'Bicol', 0, '5.6999998'), +('GMB', 'Soninke', 0, '7.5999999'), +('GEO', 'Osseetti', 0, '2.4000001'), +('GHA', 'Gurma', 0, '3.3'), +('GUM', 'Japanese', 0, '2'), +('GTM', 'Mam', 0, '2.7'), +('GIN', 'Kpelle', 0, '4.5999999'), +('GNB', 'Malinke', 0, '6.9000001'), +('HKG', 'Chiu chau', 0, '1.4'), +('IDN', 'Minangkabau', 0, '2.4000001'), +('IND', 'Tamil', 0, '6.3000002'), +('IRQ', 'Persian', 0, '0.80000001'), +('IRN', 'Luri', 0, '4.3000002'), +('ITA', 'German', 0, '0.5'), +('AUT', 'Slovene', 0, '0.40000001'), +('JPN', 'Philippene Languages', 0, '0.1'), +('YUG', 'Slovak', 0, '0.69999999'), +('CMR', 'Tikar', 0, '7.4000001'), +('CAN', 'German', 0, '1.6'), +('KAZ', 'Uzbek', 0, '2.3'), +('KEN', 'Kalenjin', 0, '10.8'), +('CAF', 'Sara', 0, '6.4000001'), +('CHN', 'Miao', 0, '0.69999999'), +('KGZ', 'Tatar', 0, '1.3'), +('COL', 'Caribbean', 0, '0.1'), +('COM', 'Comorian-Swahili', 0, '0.5'), +('COG', 'Punu', 0, '2.9000001'), +('COD', 'Zande', 0, '6.0999999'), +('LVA', 'Polish', 0, '2.0999999'), +('LBR', 'Kru', 0, '7.1999998'), +('LTU', 'Ukrainian', 0, '1.1'), +('LUX', 'German', 1, '2.3'), +('MKD', 'Serbo-Croatian', 0, '2'), +('MYS', 'English', 0, '1.6'), +('MLI', 'Tamashek', 0, '7.3000002'), +('MRT', 'Ful', 0, '1.2'), +('MUS', 'Tamil', 0, '0.80000001'), +('MEX', 'Mixtec', 0, '0.60000002'), +('FSM', 'Yap', 0, '5.8000002'), +('MDA', 'Bulgariana', 0, '1.6'), +('MNG', 'Buryat', 0, '1.7'), +('MOZ', 'Shona', 0, '6.5'), +('MMR', 'Mon', 0, '2.4000001'), +('NAM', 'Herero', 0, '8'), +('NRU', 'English', 1, '7.5'), +('NPL', 'Tamang', 0, '4.9000001'), +('NER', 'Kanuri', 0, '4.4000001'), +('NGA', 'Ibibio', 0, '5.5999999'), +('NOR', 'Saame', 0, '0'), +('CIV', '[South]Mande', 0, '7.6999998'), +('PAK', 'Urdu', 1, '7.5999999'), +('PAN', 'Embera', 0, '0.60000002'), +('MNP', 'English', 1, '4.8000002'), +('FRA', 'Spanish', 0, '0.40000001'), +('REU', 'Tamil', 0, '0'), +('ROM', 'Ukrainian', 0, '0.30000001'), +('SWE', 'Spanish', 0, '0.60000002'), +('DEU', 'Greek', 0, '0.40000001'), +('ZMB', 'Chewa', 0, '5.6999998'), +('SEN', 'Malinke', 0, '3.8'), +('SLE', 'Bullom-sherbro', 0, '3.8'), +('SVK', 'Ukrainian and Russian', 0, '0.60000002'), +('SDN', 'Nuer', 0, '4.9000001'), +('FIN', 'Saame', 0, '0'), +('TWN', 'Atayal', 0, '0.40000001'), +('TZA', 'Makonde', 0, '5.9000001'), +('DNK', 'English', 0, '0.30000001'), +('THA', 'Khmer', 0, '1.3'), +('TGO', 'Ane', 0, '5.6999998'), +('TCD', 'Ouaddai', 0, '8.6999998'), +('CZE', 'German', 0, '0.5'), +('UGA', 'Teso', 0, '6'), +('UKR', 'Hungarian', 0, '0.30000001'), +('HUN', 'Romanian', 0, '0.1'), +('UZB', 'Karakalpak', 0, '2'), +('RUS', 'Bashkir', 0, '0.69999999'), +('VNM', 'Chinese', 0, '1.4'), +('EST', 'Finnish', 0, '0.69999999'), +('USA', 'Italian', 0, '0.60000002'), +('AGO', 'Chokwe', 0, '4.1999998'), +('AUS', 'Vietnamese', 0, '0.80000001'), +('BGD', 'Santhali', 0, '0.1'), +('BEL', 'Turkish', 0, '0.89999998'), +('BEN', 'Somba', 0, '6.6999998'), +('BFA', 'Dyula', 0, '2.5999999'), +('ERI', 'Saho', 0, '3'), +('ZAF', 'Tswana', 0, '8.1000004'), +('ETH', 'Sidamo', 0, '3.2'), +('PHL', 'Waray-waray', 0, '3.8'), +('GEO', 'Abhyasi', 0, '1.7'), +('GHA', 'Joruba', 0, '1.3'), +('GIN', 'Yalunka', 0, '2.9000001'), +('GNB', 'Mandyako', 0, '4.9000001'), +('IDN', 'Batakki', 0, '2.2'), +('IND', 'Urdu', 0, '5.0999999'), +('IRN', 'Mazandarani', 0, '3.5999999'), +('ITA', 'Albaniana', 0, '0.2'), +('AUT', 'Polish', 0, '0.2'), +('JPN', 'Ainu', 0, '0'), +('YUG', 'Macedonian', 0, '0.5'), +('CMR', 'Mandara', 0, '5.6999998'), +('CAN', 'Polish', 0, '0.69999999'), +('KAZ', 'Tatar', 0, '2'), +('KEN', 'Gusii', 0, '6.0999999'), +('CAF', 'Mbum', 0, '6.4000001'), +('CHN', 'Uighur', 0, '0.60000002'), +('KGZ', 'Kazakh', 0, '0.80000001'), +('COG', 'Sango', 0, '2.5999999'), +('COD', 'Ngala and Bangi', 0, '5.8000002'), +('LVA', 'Lithuanian', 0, '1.2'), +('LBR', 'Mano', 0, '7.1999998'), +('MYS', 'Dusun', 0, '1.1'), +('MLI', 'Songhai', 0, '6.9000001'), +('MRT', 'Zenaga', 0, '1.2'), +('MUS', 'Marathi', 0, '0.69999999'), +('MEX', 'Otomí', 0, '0.40000001'), +('FSM', 'Wolea', 0, '3.7'), +('MNG', 'Dariganga', 0, '1.4'), +('MOZ', 'Tswa', 0, '6'), +('MMR', 'Chin', 0, '2.2'), +('NAM', 'Caprivi', 0, '4.6999998'), +('NPL', 'Newari', 0, '3.7'), +('NGA', 'Kanuri', 0, '4.0999999'), +('PAK', 'Balochi', 0, '3'), +('PAN', 'Arabic', 0, '0.60000002'), +('MNP', 'Carolinian', 0, '4.8000002'), +('FRA', 'Turkish', 0, '0.40000001'), +('ROM', 'Serbo-Croatian', 0, '0.1'), +('SWE', 'Norwegian', 0, '0.5'), +('DEU', 'Polish', 0, '0.30000001'), +('ZMB', 'Nsenga', 0, '4.3000002'), +('SEN', 'Soninke', 0, '1.3'), +('SLE', 'Ful', 0, '3.8'), +('SDN', 'Zande', 0, '2.7'), +('TWN', 'Paiwan', 0, '0.30000001'), +('TZA', 'Nyakusa', 0, '5.4000001'), +('DNK', 'Swedish', 0, '0.30000001'), +('THA', 'Kuy', 0, '1.1'), +('TGO', 'Moba', 0, '5.4000001'), +('TCD', 'Hadjarai', 0, '6.6999998'), +('CZE', 'Silesiana', 0, '0.40000001'), +('UGA', 'Lango', 0, '5.9000001'), +('UKR', 'Belorussian', 0, '0.30000001'), +('HUN', 'Slovak', 0, '0.1'), +('UZB', 'Tatar', 0, '1.8'), +('RUS', 'Chechen', 0, '0.60000002'), +('VNM', 'Khmer', 0, '1.4'), +('USA', 'Chinese', 0, '0.60000002'), +('AGO', 'Luvale', 0, '3.5999999'), +('AUS', 'Serbo-Croatian', 0, '0.60000002'), +('BGD', 'Tripuri', 0, '0.1'), +('BEN', 'Ful', 0, '5.5999999'), +('ZAF', 'Southsotho', 0, '7.5999999'), +('ETH', 'Walaita', 0, '2.8'), +('PHL', 'Pampango', 0, '3'), +('GIN', 'Loma', 0, '2.3'), +('IDN', 'Bugi', 0, '2.2'), +('IND', 'Gujarati', 0, '4.8000002'), +('IRN', 'Balochi', 0, '2.3'), +('ITA', 'Slovene', 0, '0.2'), +('AUT', 'Czech', 0, '0.2'), +('CMR', 'Maka', 0, '4.9000001'), +('CAN', 'Spanish', 0, '0.69999999'), +('KEN', 'Meru', 0, '5.5'), +('CHN', 'Yi', 0, '0.60000002'), +('KGZ', 'Tadzhik', 0, '0.80000001'), +('COD', 'Rundi', 0, '3.8'), +('LBR', 'Loma', 0, '5.8000002'), +('MOZ', 'Chuabo', 0, '5.6999998'), +('MMR', 'Kachin', 0, '1.4'), +('NAM', 'San', 0, '1.9'), +('NPL', 'Hindi', 0, '3'), +('NGA', 'Edo', 0, '3.3'), +('PAK', 'Hindko', 0, '2.4000001'), +('SLE', 'Kuranko', 0, '3.4000001'), +('SDN', 'Bari', 0, '2.5'), +('TZA', 'Chaga and Pare', 0, '4.9000001'), +('DNK', 'Norwegian', 0, '0.30000001'), +('TGO', 'Naudemba', 0, '4.0999999'), +('TCD', 'Tandjile', 0, '6.5'), +('CZE', 'Romani', 0, '0.30000001'), +('UGA', 'Lugbara', 0, '4.6999998'), +('UKR', 'Polish', 0, '0.1'), +('RUS', 'Mordva', 0, '0.5'), +('VNM', 'Nung', 0, '1.1'), +('USA', 'Tagalog', 0, '0.40000001'), +('AGO', 'Ambo', 0, '2.4000001'), +('AUS', 'German', 0, '0.60000002'), +('ZAF', 'Tsonga', 0, '4.3000002'), +('PHL', 'Pangasinan', 0, '1.8'), +('IDN', 'Banja', 0, '1.8'), +('IND', 'Kannada', 0, '3.9000001'), +('IRN', 'Arabic', 0, '2.2'), +('ITA', 'Romani', 0, '0.2'), +('AUT', 'Romanian', 0, '0.2'), +('CMR', 'Masana', 0, '3.9000001'), +('CAN', 'Portuguese', 0, '0.69999999'), +('KEN', 'Nyika', 0, '4.8000002'), +('CHN', 'Tujia', 0, '0.5'), +('COD', 'Teke', 0, '2.7'), +('LBR', 'Malinke', 0, '5.0999999'), +('MOZ', 'Ronga', 0, '3.7'), +('MMR', 'Kayah', 0, '0.40000001'), +('NAM', 'German', 0, '0.89999998'), +('NGA', 'Tiv', 0, '2.3'), +('PAK', 'Brahui', 0, '1.2'), +('SLE', 'Yalunka', 0, '3.4000001'), +('SDN', 'Fur', 0, '2.0999999'), +('TZA', 'Luguru', 0, '4.9000001'), +('TGO', 'Gurma', 0, '3.4000001'), +('TCD', 'Gorane', 0, '6.1999998'), +('CZE', 'Hungarian', 0, '0.2'), +('UGA', 'Gisu', 0, '4.5'), +('RUS', 'Kazakh', 0, '0.40000001'), +('VNM', 'Miao', 0, '0.89999998'), +('USA', 'Polish', 0, '0.30000001'), +('AGO', 'Luchazi', 0, '2.4000001'), +('ZAF', 'Swazi', 0, '2.5'), +('PHL', 'Maguindanao', 0, '1.4'), +('IDN', 'Bali', 0, '1.7'), +('IND', 'Malajalam', 0, '3.5999999'), +('IRN', 'Bakhtyari', 0, '1.7'), +('CAN', 'Punjabi', 0, '0.69999999'), +('KEN', 'Masai', 0, '1.6'), +('CHN', 'Mongolian', 0, '0.40000001'), +('COD', 'Boa', 0, '2.3'), +('MOZ', 'Marendje', 0, '3.5'), +('NGA', 'Ijo', 0, '1.8'), +('SDN', 'Chilluk', 0, '1.7'), +('TZA', 'Shambala', 0, '4.3000002'), +('UGA', 'Acholi', 0, '4.4000001'), +('RUS', 'Avarian', 0, '0.40000001'), +('VNM', 'Man', 0, '0.69999999'), +('USA', 'Korean', 0, '0.30000001'), +('ZAF', 'Venda', 0, '2.2'), +('PHL', 'Maranao', 0, '1.3'), +('IND', 'Orija', 0, '3.3'), +('IRN', 'Turkmenian', 0, '1.6'), +('CAN', 'Ukrainian', 0, '0.60000002'), +('KEN', 'Turkana', 0, '1.4'), +('CHN', 'Tibetan', 0, '0.40000001'), +('COD', 'Chokwe', 0, '1.8'), +('MOZ', 'Nyanja', 0, '3.3'), +('NGA', 'Bura', 0, '1.6'), +('SDN', 'Lotuko', 0, '1.5'), +('TZA', 'Gogo', 0, '3.9000001'), +('UGA', 'Rwanda', 0, '3.2'), +('RUS', 'Mari', 0, '0.40000001'), +('USA', 'Vietnamese', 0, '0.2'), +('ZAF', 'Ndebele', 0, '1.5'), +('IND', 'Punjabi', 0, '2.8'), +('CAN', 'Dutch', 0, '0.5'), +('CHN', 'Puyi', 0, '0.2'), +('TZA', 'Ha', 0, '3.5'), +('RUS', 'Udmur', 0, '0.30000001'), +('USA', 'Japanese', 0, '0.2'), +('IND', 'Asami', 0, '1.5'), +('CAN', 'Eskimo Languages', 0, '0.1'), +('CHN', 'Dong', 0, '0.2'), +('RUS', 'Belorussian', 0, '0.30000001'), +('USA', 'Portuguese', 0, '0.2'); + +ALTER TABLE city + ADD CONSTRAINT city_pkey PRIMARY KEY (id); + +ALTER TABLE country + ADD CONSTRAINT country_pkey PRIMARY KEY (code); + +ALTER TABLE countrylanguage + ADD CONSTRAINT countrylanguage_pkey PRIMARY KEY (countrycode, language); + +ALTER TABLE country + ADD CONSTRAINT country_capital_fkey FOREIGN KEY (capital) REFERENCES city(id); + +ALTER TABLE countrylanguage + ADD CONSTRAINT countrylanguage_countrycode_fkey FOREIGN KEY (countrycode) REFERENCES country(code); + +GO diff --git a/testdata/oracle/array-join.sql b/testdata/oracle/array-join.sql new file mode 100644 index 00000000..313c1077 --- /dev/null +++ b/testdata/oracle/array-join.sql @@ -0,0 +1,43 @@ +CREATE TYPE string_array AS VARRAY(100) OF VARCHAR2(100); +/ + +CREATE TABLE array_join_root ( + id VARCHAR2(100) PRIMARY KEY +); + +CREATE TABLE array_join_list_a ( + id VARCHAR2(100) PRIMARY KEY, + root_id VARCHAR2(100), + a_elem string_array +); + +CREATE TABLE array_join_list_b ( + id VARCHAR2(100) PRIMARY KEY, + root_id VARCHAR2(100), + b_elem INTEGER +); + +INSERT INTO array_join_root (id) VALUES +('r0'), +('r1'); + +INSERT INTO array_join_list_a (id, root_id, a_elem) VALUES +('a0', 'r0', string_array('foo1', 'foo2')), +('a1', 'r0', string_array('bar1', 'bar2')), +('a2', 'r0', string_array('baz1', 'baz2')), +('a3', 'r0', string_array('quux1', 'quux2')), +('a4', 'r1', string_array('foo11', 'foo22')), +('a5', 'r1', string_array('bar11', 'bar22')), +('a6', 'r1', string_array('baz11', 'baz22')), +('a7', 'r1', string_array('quux11', 'quux22')); + + +INSERT INTO array_join_list_b (id, root_id, b_elem) VALUES +('b0', 'r0', '23'), +('b1', 'r0', '13'), +('b2', 'r0', '17'), +('b3', 'r0', '11'), +('b4', 'r1', '231'), +('b5', 'r1', '131'), +('b6', 'r1', '171'), +('b7', 'r1', '111'); diff --git a/testdata/oracle/coalesce.sql b/testdata/oracle/coalesce.sql new file mode 100644 index 00000000..07885524 --- /dev/null +++ b/testdata/oracle/coalesce.sql @@ -0,0 +1,42 @@ +CREATE TABLE r ( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE ca ( + id VARCHAR(100) PRIMARY KEY, + rid VARCHAR(100) NOT NULL, + a INTEGER NOT NULL +); + +CREATE TABLE cb ( + id VARCHAR(100) PRIMARY KEY, + rid VARCHAR(100) NOT NULL, + b BOOLEAN NOT NULL +); + +CREATE TABLE cc ( + id VARCHAR(100) PRIMARY KEY, + rid VARCHAR(100) NOT NULL, + c TIMESTAMP WITH TIME ZONE NOT NULL +); + +INSERT INTO r (id) VALUES +('R1'), +('R2'), +('R3'); + +INSERT INTO ca (id, rid, a) VALUES +('CA1a', 'R1', '10'), +('CA1b', 'R1', '11'), +('CA2', 'R2', '20'), +('CA3', 'R3', '30'); + +INSERT INTO cb (id, rid, b) VALUES +('CB2a', 'R2', 'TRUE'), +('CB2b', 'R2', 'FALSE'), +('CB3', 'R3', 'TRUE'); + +INSERT INTO cc (id, rid, c) VALUES +('CC1', 'R1', TIMESTAMP '2020-05-27 21:00:00 +02:00'), +('CC2', 'R2', TIMESTAMP '2004-10-19 10:23:54 +02:00'), +('CC3', 'R3', TIMESTAMP '2014-10-19 10:23:54 +02:00'); diff --git a/testdata/oracle/composite-keys.sql b/testdata/oracle/composite-keys.sql new file mode 100644 index 00000000..36427fc4 --- /dev/null +++ b/testdata/oracle/composite-keys.sql @@ -0,0 +1,24 @@ +CREATE TABLE composite_key_parent ( + key_1 INTEGER NOT NULL, + key_2 VARCHAR(100) NOT NULL, + PRIMARY KEY (key_1, key_2) +); + +CREATE TABLE composite_key_child ( + id INTEGER PRIMARY KEY, + parent_1 INTEGER NOT NULL, + parent_2 VARCHAR(100) NOT NULL, + FOREIGN KEY (parent_1, parent_2) REFERENCES composite_key_parent (key_1, key_2) +); + +INSERT INTO composite_key_parent (key_1, key_2) VALUES +(1, 'foo'), +(1, 'bar'), +(2, 'foo'), +(2, 'bar'); + +INSERT INTO composite_key_child (id, parent_1, parent_2) VALUES +(1, 1, 'foo'), +(2, 1, 'bar'), +(3, 2, 'foo'), +(4, 2, 'bar'); diff --git a/testdata/oracle/cursor-json.sql b/testdata/oracle/cursor-json.sql new file mode 100644 index 00000000..d3ee3d8a --- /dev/null +++ b/testdata/oracle/cursor-json.sql @@ -0,0 +1,9 @@ +CREATE TABLE brands ( + id Int PRIMARY KEY, + categories Int +); + +INSERT INTO brands (id, categories) VALUES +('1', '8'), +('2', '16'); + diff --git a/testdata/oracle/embedding.sql b/testdata/oracle/embedding.sql new file mode 100644 index 00000000..0f4c4699 --- /dev/null +++ b/testdata/oracle/embedding.sql @@ -0,0 +1,39 @@ +CREATE TABLE films ( + title VARCHAR(100) PRIMARY KEY, + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100) +); + +CREATE TABLE series ( + title VARCHAR(100) PRIMARY KEY, + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100) +); + +CREATE TABLE episodes2 ( + title VARCHAR(100) PRIMARY KEY, + series_title VARCHAR(100) NOT NULL, + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100) +); + +INSERT INTO films (title, synopsis_short, synopsis_long) VALUES +('Film 1', 'Short film 1', 'Long film 1'), +('Film 2', 'Short film 2', 'Long film 2'), +('Film 3', 'Short film 3', 'Long film 3'); + +INSERT INTO series (title, synopsis_short, synopsis_long) VALUES +('Series 1', 'Short series 1', 'Long series 1'), +('Series 2', 'Short series 2', 'Long series 2'), +('Series 3', 'Short series 3', 'Long series 3'); + +INSERT INTO episodes2 (title, series_title, synopsis_short, synopsis_long) VALUES +('S01E01', 'Series 1', 'Short S01E01', 'Long S01E01'), +('S01E02', 'Series 1', 'Short S01E02', 'Long S01E02'), +('S01E03', 'Series 1', 'Short S01E03', 'Long S01E03'), +('S02E01', 'Series 2', 'Short S02E01', 'Long S02E01'), +('S02E02', 'Series 2', 'Short S02E02', 'Long S02E02'), +('S02E03', 'Series 2', 'Short S02E03', 'Long S02E03'), +('S03E01', 'Series 3', 'Short S03E01', 'Long S03E01'), +('S03E02', 'Series 3', 'Short S03E02', 'Long S03E02'), +('S03E03', 'Series 3', 'Short S03E03', 'Long S03E03'); diff --git a/testdata/oracle/embedding2.sql b/testdata/oracle/embedding2.sql new file mode 100644 index 00000000..ea4a2452 --- /dev/null +++ b/testdata/oracle/embedding2.sql @@ -0,0 +1,18 @@ +CREATE TABLE t_program ( + c_program_id VARCHAR(100) NOT NULL PRIMARY KEY +); + +CREATE TABLE t_observation ( + c_program_id VARCHAR(100) NOT NULL REFERENCES t_program(c_program_id), + c_observation_id VARCHAR(100) NOT NULL PRIMARY KEY +); + +INSERT INTO t_program (c_program_id) VALUES +('foo'), +('bar'); + +INSERT INTO t_observation (c_program_id, c_observation_id) VALUES +('foo', 'fo1'), +('foo', 'fo2'), +('bar', 'bo1'), +('bar', 'bo2'); diff --git a/testdata/oracle/filter-join-alias.sql b/testdata/oracle/filter-join-alias.sql new file mode 100644 index 00000000..eca8a2bb --- /dev/null +++ b/testdata/oracle/filter-join-alias.sql @@ -0,0 +1,15 @@ +CREATE TABLE episodes3 ( + id VARCHAR(100), + name VARCHAR(100), + PRIMARY KEY (id, name) +); + +CREATE TABLE images3 ( + public_url VARCHAR(100) PRIMARY KEY, + id VARCHAR(100) NOT NULL, + name VARCHAR(100) NOT NULL +); + +INSERT INTO episodes3 (id, name) VALUES ('a', 'abc'); + +INSERT INTO images3 (public_url, id, name) VALUES ('test', 'a', 'abc'); diff --git a/testdata/oracle/filter-order-offset-limit-2.sql b/testdata/oracle/filter-order-offset-limit-2.sql new file mode 100644 index 00000000..9a009def --- /dev/null +++ b/testdata/oracle/filter-order-offset-limit-2.sql @@ -0,0 +1,48 @@ +CREATE TABLE root_2 ( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE containers_2 ( + id VARCHAR(100) PRIMARY KEY, + root_id VARCHAR(100) +); + +CREATE TABLE lista_2 ( + id VARCHAR(100) PRIMARY KEY, + container_id VARCHAR(100) +); + +CREATE TABLE listb_2 ( + id VARCHAR(100) PRIMARY KEY, + container_id VARCHAR(100) +); + +INSERT INTO root_2 (id) VALUES +('r0'), +('r1'); + +INSERT INTO containers_2 (id, root_id) VALUES +('c0', 'r0'), +('c1', 'r0'), +('c2', 'r1'), +('c3', 'r1'); + +INSERT INTO lista_2 (id, container_id) VALUES +('a00', 'c0'), +('a01', 'c0'), +('a10', 'c1'), +('a11', 'c1'), +('a20', 'c2'), +('a21', 'c2'), +('a30', 'c3'), +('a31', 'c3'); + +INSERT INTO listb_2 (id, container_id) VALUES +('b00', 'c0'), +('b01', 'c0'), +('b10', 'c1'), +('b11', 'c1'), +('b20', 'c2'), +('b21', 'c2'), +('b30', 'c3'), +('b31', 'c3'); diff --git a/testdata/oracle/filter-order-offset-limit.sql b/testdata/oracle/filter-order-offset-limit.sql new file mode 100644 index 00000000..8c11be47 --- /dev/null +++ b/testdata/oracle/filter-order-offset-limit.sql @@ -0,0 +1,39 @@ +CREATE TABLE root ( + id VARCHAR(100) PRIMARY KEY +); + +CREATE TABLE lista ( + id VARCHAR(100) PRIMARY KEY, + root_id VARCHAR(100), + a_elem VARCHAR(100) +); + +CREATE TABLE listb ( + id VARCHAR(100) PRIMARY KEY, + root_id VARCHAR(100), + b_elem INTEGER +); + +INSERT INTO root (id) VALUES +('r0'), +('r1'); + +INSERT INTO lista (id, root_id, a_elem) VALUES +('a0', 'r0', 'foo'), +('a1', 'r0', 'bar'), +('a2', 'r0', 'baz'), +('a3', 'r0', 'quux'), +('a4', 'r1', 'foo1'), +('a5', 'r1', 'bar1'), +('a6', 'r1', 'baz1'), +('a7', 'r1', 'quux1'); + +INSERT INTO listb (id, root_id, b_elem) VALUES +('b0', 'r0', 23), +('b1', 'r0', 13), +('b2', 'r0', 17), +('b3', 'r0', 11), +('b4', 'r1', 231), +('b5', 'r1', 131), +('b6', 'r1', 171), +('b7', 'r1', 111); diff --git a/testdata/oracle/graph.sql b/testdata/oracle/graph.sql new file mode 100644 index 00000000..2644d870 --- /dev/null +++ b/testdata/oracle/graph.sql @@ -0,0 +1,21 @@ +CREATE TABLE graph_node ( + id INTEGER PRIMARY KEY +); + +CREATE TABLE graph_edge ( + id INTEGER PRIMARY KEY, + a INTEGER, + b INTEGER +); + +INSERT INTO graph_node (id) VALUES +('1'), +('2'), +('3'), +('4'); + +INSERT INTO graph_edge (id, a, b) VALUES +('12', '1', '2'), +('13', '1', '3'), +('24', '2', '4'), +('34', '3', '4'); diff --git a/testdata/oracle/interfaces.sql b/testdata/oracle/interfaces.sql new file mode 100644 index 00000000..813dd222 --- /dev/null +++ b/testdata/oracle/interfaces.sql @@ -0,0 +1,37 @@ +CREATE TABLE entities ( + id VARCHAR(100) PRIMARY KEY, + entity_type INTEGER NOT NULL, + title VARCHAR(100), + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100), + film_rating VARCHAR(100), + film_label INTEGER, + series_number_of_episodes INTEGER, + series_label VARCHAR(100), + image_url VARCHAR(100), + hidden_image_url VARCHAR(100) +); + +CREATE TABLE episodes ( + id VARCHAR(100) PRIMARY KEY, + series_id VARCHAR(100) NOT NULL, + title VARCHAR(100), + synopsis_short VARCHAR(100), + synopsis_long VARCHAR(100) +); + +INSERT INTO entities (id, entity_type, title, synopsis_short, synopsis_long, film_rating, film_label, series_number_of_episodes, series_label, image_url, hidden_image_url) VALUES +('1', 1, 'Film 1', 'Short film 1', 'Long film 1', 'PG', 1, NULL, NULL, 'http://www.example.com/film1.jpg', NULL), +('2', 1, 'Film 2', 'Short film 2', 'Long film 2', 'U', 2, NULL, NULL, 'http://www.example.com/film2.jpg', NULL), +('3', 1, 'Film 3', 'Short film 3', 'Long film 3', '15', 3, NULL, NULL, 'http://www.example.com/film3.jpg', NULL), +('4', 2, 'Series 1', 'Short series 1', 'Long series 1', NULL, NULL, 5, 'One', NULL, 'hidden_series1.jpg'), +('5', 2, 'Series 2', 'Short series 2', 'Long series 2', NULL, NULL, 6, 'Two', NULL, 'hidden_series2.jpg'), +('6', 2, 'Series 3', 'Short series 3', 'Long series 3', NULL, NULL, 7, 'Three', NULL, 'hidden_series3.jpg'); + +INSERT INTO episodes (id, series_id, title, synopsis_short, synopsis_long) VALUES +('1', '4', 'S1E1', 'Short S1E1', 'Long S1E1'), +('2', '4', 'S1E2', 'Short S1E2', 'Long S1E2'), +('3', '5', 'S2E1', 'Short S2E1', 'Long S2E1'), +('4', '5', 'S2E2', 'Short S2E2', 'Long S2E2'), +('5', '6', 'S3E1', 'Short S3E1', 'Long S3E1'), +('6', '6', 'S3E2', 'Short S3E2', 'Long S3E2'); diff --git a/testdata/oracle/jsonb.sql b/testdata/oracle/jsonb.sql new file mode 100644 index 00000000..43e870a0 --- /dev/null +++ b/testdata/oracle/jsonb.sql @@ -0,0 +1,9 @@ +CREATE TABLE records ( + id Integer PRIMARY KEY, + record JSON +); + +INSERT INTO records (id, record) VALUES +('1', '{"bool":true,"int":1,"float":1.3,"string":"foo","id":"Foo","array":[1,2,3],"choice":"ONE","object":{"id":"obj0","aField":27},"children":[{"id":"a0","aField":11},{"id":"b0","bField":"wibble"}]}'), +('2', '{"bool":false,"int":2,"float":2.4,"string":"bar","id":"Bar","array":[4,5,6],"choice":"TWO","object":{"id":"obj1","aField":28},"children":[{"id":"a1","aField":12},{"id":"b1","bField":"wobble"}]}'), +('3', '{"bool":true,"int":3,"float":3.5,"string":"baz","id":"Baz","array":[7,8,9],"choice":"THREE","object":{"id":"obj2","aField":29},"children":[{"id":"a2","aField":13},{"id":"b2","bField":"quux"}]}'); diff --git a/testdata/oracle/like.sql b/testdata/oracle/like.sql new file mode 100644 index 00000000..8f23250c --- /dev/null +++ b/testdata/oracle/like.sql @@ -0,0 +1,9 @@ +CREATE TABLE likes ( + id INTEGER PRIMARY KEY, + notnullable VARCHAR(100) NOT NULL, + nullable VARCHAR(100) +); + +INSERT INTO likes (id, notnullable, nullable) VALUES +(1, 'foo', NULL), +(2, 'bar', 'baz'); diff --git a/testdata/oracle/movies.sql b/testdata/oracle/movies.sql new file mode 100644 index 00000000..1e657b1a --- /dev/null +++ b/testdata/oracle/movies.sql @@ -0,0 +1,45 @@ +CREATE TYPE string_array2 AS VARRAY(100) OF VARCHAR2(100); +/ + +CREATE TABLE movies ( + id VARCHAR(36) PRIMARY KEY, + title VARCHAR(100) NOT NULL, + genre INTEGER NOT NULL, + releasedate DATE NOT NULL, + showtime INTERVAL DAY (0) TO SECOND (0) NOT NULL, + nextshowing TIMESTAMP WITH TIME ZONE NOT NULL, + duration NUMBER(18) NOT NULL, + categories string_array2 NOT NULL, + features string_array2 NOT NULL, + tags INTEGER NOT NULL +); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('6a7837fc-b463-4d32-b628-0f4b3065cb21', 'Celine et Julie Vont en Bateau', '1', DATE '1974-10-07', INTERVAL '0 19:35:00' DAY TO SECOND (0), TIMESTAMP '2020-05-22 19:35:00 +00:00', '12300000', string_array2('drama','comedy'), string_array2('hd','hls'), '1'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('11daf8c0-11c3-4453-bfe1-cb6e6e2f9115', 'Duelle', '1', DATE '1975-09-15', INTERVAL '0 19:20:00' DAY TO SECOND (0), TIMESTAMP '2020-05-27 19:20:00 +00:00', '7260000', string_array2('drama'), string_array2('hd'), '1'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('aea9756f-621b-42d5-b130-71f3916c4ba3', 'L''Amour fou', '1', DATE '1969-01-15', INTERVAL '0 21:00:00' DAY TO SECOND (0), TIMESTAMP '2020-05-27 21:00:00 +00:00', '15120000', string_array2('drama'), string_array2('hd'), '2'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('2ddb041f-86c2-4bd3-848c-990a3862634e', 'Last Year at Marienbad', '1', DATE '1961-06-25', INTERVAL '0 20:30:00' DAY TO SECOND (0), TIMESTAMP '2020-05-26 20:30:00 +00:00', '5640000', string_array2('drama'), string_array2('hd'), '5'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('8ae5b13b-044c-4ff0-8b71-ccdb7d77cd88', 'Zazie dans le Métro', '3', DATE '1960-10-28', INTERVAL '0 20:15:00' DAY TO SECOND (0), TIMESTAMP '2020-05-25 20:15:00 +00:00', '5340000', string_array2('drama', 'comedy'), string_array2('hd'), '3'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('9dce9deb-9188-4cc2-9685-9842b8abdd34', 'Alphaville', '2', DATE '1965-05-05', INTERVAL '0 19:45:00' DAY TO SECOND (0), TIMESTAMP '2020-05-19 19:45:00 +00:00', '5940000', string_array2('drama', 'science fiction'), string_array2('hd'), '4'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('1bf00ac6-91ab-4e51-b686-3fd5e2324077', 'Stalker', '1', DATE '1979-05-13', INTERVAL '0 15:30:00' DAY TO SECOND (0), TIMESTAMP '2020-05-19 15:30:00 +00:00', '9660000', string_array2('drama', 'science fiction'), string_array2('hd'), '7'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('6a878e06-6563-4a0c-acd9-d28dcfb2e91a', 'Weekend', '3', DATE '1967-12-29', INTERVAL '0 22:30:00' DAY TO SECOND (0), TIMESTAMP '2020-05-19 22:30:00 +00:00', '6300000', string_array2('drama', 'comedy'), string_array2('hd'), '2'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('2a40415c-ea6a-413f-bbef-a80ae280c4ff', 'Daisies', '3', DATE '1966-12-30', INTERVAL '0 21:30:00' DAY TO SECOND (0), TIMESTAMP '2020-05-15 21:30:00 +00:00', '4560000', string_array2('drama', 'comedy'), string_array2('hd'), '6'); + +INSERT INTO movies (id, title, genre, releasedate, showtime, nextshowing, duration, categories, features, tags) VALUES +('2f6dcb0a-4122-4a21-a1c6-534744dd6b85', 'Le Pont du Nord', '1', DATE '1982-01-13', INTERVAL '0 20:45:00' DAY TO SECOND (0), TIMESTAMP '2020-05-11 20:45:00 +00:00', '7620000', string_array2('drama'), string_array2('hd'), '3'); diff --git a/modules/sql/shared/src/test/resources/db/mutation.sql b/testdata/oracle/mutation.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/mutation.sql rename to testdata/oracle/mutation.sql diff --git a/testdata/oracle/projection.sql b/testdata/oracle/projection.sql new file mode 100644 index 00000000..42399720 --- /dev/null +++ b/testdata/oracle/projection.sql @@ -0,0 +1,34 @@ +CREATE TABLE level0 ( + id VARCHAR2(100) PRIMARY KEY +); + +CREATE TABLE level1 ( + id VARCHAR2(100) PRIMARY KEY, + level0_id VARCHAR2(100) +); + +CREATE TABLE level2 ( + id VARCHAR2(100) PRIMARY KEY, + level1_id VARCHAR2(100), + attr BOOLEAN +); + +INSERT INTO level0 (id) VALUES +('00'), +('01'); + +INSERT INTO level1 (id, level0_id) VALUES +('10', '00'), +('11', '00'), +('12', '01'), +('13', '01'); + +INSERT INTO level2 (id, level1_id, attr) VALUES +('20', '10', 'FALSE'), +('21', '10', 'FALSE'), +('22', '11', 'FALSE'), +('23', '11', 'FALSE'), +('24', '12', 'TRUE'), +('25', '12', 'FALSE'), +('26', '13', 'FALSE'), +('27', '13', 'FALSE'); diff --git a/testdata/oracle/recursive-interfaces.sql b/testdata/oracle/recursive-interfaces.sql new file mode 100644 index 00000000..402aa0bc --- /dev/null +++ b/testdata/oracle/recursive-interfaces.sql @@ -0,0 +1,17 @@ +CREATE TABLE recursive_interface_items ( + id VARCHAR2(100) PRIMARY KEY, + item_type INTEGER NOT NULL +); + +CREATE TABLE recursive_interface_next_items ( + id VARCHAR2(100) PRIMARY KEY, + next_item VARCHAR2(100) +); + +INSERT INTO recursive_interface_items (id, item_type) VALUES +('1', '1'), +('2', '2'); + +INSERT INTO recursive_interface_next_items (id, next_item) VALUES +('1', '2'), +('2', '1'); diff --git a/testdata/oracle/sibling-lists.sql b/testdata/oracle/sibling-lists.sql new file mode 100644 index 00000000..8c9383f0 --- /dev/null +++ b/testdata/oracle/sibling-lists.sql @@ -0,0 +1,37 @@ +CREATE TABLE seq_scan_a +( + id VARCHAR2(100) PRIMARY KEY +); + +CREATE TABLE seq_scan_b +( + id VARCHAR2(100) PRIMARY KEY, + a_id VARCHAR2(100) NOT NULL +); + +CREATE INDEX seq_scan_b_a_id_idx ON seq_scan_b(a_id); + +CREATE TABLE seq_scan_c +( + id VARCHAR2(100) PRIMARY KEY, + b_id VARCHAR2(100) NOT NULL, + name_c VARCHAR2(100) NOT NULL +); + +CREATE INDEX seq_scan_c_b_id_idx ON seq_scan_c(b_id); + +CREATE TABLE seq_scan_d +( + id VARCHAR2(100) PRIMARY KEY, + b_id VARCHAR2(100) NOT NULL, + name_d VARCHAR2(100) NOT NULL +); + +CREATE INDEX seq_scan_d_b_id_idx ON seq_scan_d(b_id); + +INSERT INTO seq_scan_a(id) VALUES('id_a_1'); + +INSERT INTO seq_scan_b(id, a_id) VALUES('id_b_1', 'id_a_1'); + +INSERT INTO seq_scan_c(id, b_id, name_c) VALUES('id_c_1', 'id_b_1', 'name_c'); +INSERT INTO seq_scan_d(id, b_id, name_d) VALUES('id_d_1', 'id_b_1', 'name_d'); diff --git a/testdata/oracle/tree.sql b/testdata/oracle/tree.sql new file mode 100644 index 00000000..35aadb47 --- /dev/null +++ b/testdata/oracle/tree.sql @@ -0,0 +1,14 @@ +CREATE TABLE bintree ( + id INTEGER PRIMARY KEY, + left_child INTEGER, + right_child INTEGER +); + +INSERT INTO bintree (id, left_child, right_child) VALUES +(0, 1, 2), +(1, 3, 4), +(2, 5, 6), +(3, NULL, NULL), +(4, NULL, NULL), +(5, NULL, NULL), +(6, NULL, NULL); diff --git a/testdata/oracle/unions.sql b/testdata/oracle/unions.sql new file mode 100644 index 00000000..a3527bae --- /dev/null +++ b/testdata/oracle/unions.sql @@ -0,0 +1,10 @@ +CREATE TABLE collections ( + id VARCHAR2(100) PRIMARY KEY, + item_type VARCHAR2(100) NOT NULL, + itema VARCHAR2(100), + itemb VARCHAR2(100) +); + +INSERT INTO collections (id, item_type, itema, itemb) VALUES +('1', 'ItemA', 'A', NULL), +('2', 'ItemB', NULL, 'B'); diff --git a/testdata/oracle/world.sql b/testdata/oracle/world.sql new file mode 100644 index 00000000..a495ee59 --- /dev/null +++ b/testdata/oracle/world.sql @@ -0,0 +1,5365 @@ +SET DEFINE OFF; + +CREATE TABLE city ( + id integer NOT NULL, + name nvarchar2(100) NOT NULL, + countrycode char(3) NOT NULL, + district nvarchar2(100) NOT NULL, + population integer NOT NULL +); + +CREATE TABLE country ( + code char(3) NOT NULL, + name nvarchar2(100) NOT NULL, + continent nvarchar2(100) NOT NULL, + region nvarchar2(100) NOT NULL, + surfacearea real NOT NULL, + indepyear smallint, + population integer NOT NULL, + lifeexpectancy real, + gnp numeric(10,2), + gnpold numeric(10,2), + localname nvarchar2(100) NOT NULL, + governmentform nvarchar2(100) NOT NULL, + headofstate nvarchar2(100), + capital integer, + code2 char(2) NOT NULL +); + +CREATE TABLE countrylanguage ( + countrycode char(3) NOT NULL, + language nvarchar2(100) NOT NULL, + isofficial boolean NOT NULL, + percentage real NOT NULL +); + +INSERT INTO city (id, name, countrycode, district, population) VALUES +('1', 'Kabul', 'AFG', 'Kabol', '1780000'), +('2', 'Qandahar', 'AFG', 'Qandahar', '237500'), +('3', 'Herat', 'AFG', 'Herat', '186800'), +('4', 'Mazar-e-Sharif', 'AFG', 'Balkh', '127800'), +('5', 'Amsterdam', 'NLD', 'Noord-Holland', '731200'), +('6', 'Rotterdam', 'NLD', 'Zuid-Holland', '593321'), +('7', 'Haag', 'NLD', 'Zuid-Holland', '440900'), +('8', 'Utrecht', 'NLD', 'Utrecht', '234323'), +('9', 'Eindhoven', 'NLD', 'Noord-Brabant', '201843'), +('10', 'Tilburg', 'NLD', 'Noord-Brabant', '193238'), +('11', 'Groningen', 'NLD', 'Groningen', '172701'), +('12', 'Breda', 'NLD', 'Noord-Brabant', '160398'), +('13', 'Apeldoorn', 'NLD', 'Gelderland', '153491'), +('14', 'Nijmegen', 'NLD', 'Gelderland', '152463'), +('15', 'Enschede', 'NLD', 'Overijssel', '149544'), +('16', 'Haarlem', 'NLD', 'Noord-Holland', '148772'), +('17', 'Almere', 'NLD', 'Flevoland', '142465'), +('18', 'Arnhem', 'NLD', 'Gelderland', '138020'), +('19', 'Zaanstad', 'NLD', 'Noord-Holland', '135621'), +('20', '´s-Hertogenbosch', 'NLD', 'Noord-Brabant', '129170'), +('21', 'Amersfoort', 'NLD', 'Utrecht', '126270'), +('22', 'Maastricht', 'NLD', 'Limburg', '122087'), +('23', 'Dordrecht', 'NLD', 'Zuid-Holland', '119811'), +('24', 'Leiden', 'NLD', 'Zuid-Holland', '117196'), +('25', 'Haarlemmermeer', 'NLD', 'Noord-Holland', '110722'), +('26', 'Zoetermeer', 'NLD', 'Zuid-Holland', '110214'), +('27', 'Emmen', 'NLD', 'Drenthe', '105853'), +('28', 'Zwolle', 'NLD', 'Overijssel', '105819'), +('29', 'Ede', 'NLD', 'Gelderland', '101574'), +('30', 'Delft', 'NLD', 'Zuid-Holland', '95268'), +('31', 'Heerlen', 'NLD', 'Limburg', '95052'), +('32', 'Alkmaar', 'NLD', 'Noord-Holland', '92713'), +('33', 'Willemstad', 'ANT', 'Curaçao', '2345'), +('34', 'Tirana', 'ALB', 'Tirana', '270000'), +('35', 'Alger', 'DZA', 'Alger', '2168000'), +('36', 'Oran', 'DZA', 'Oran', '609823'), +('37', 'Constantine', 'DZA', 'Constantine', '443727'), +('38', 'Annaba', 'DZA', 'Annaba', '222518'), +('39', 'Batna', 'DZA', 'Batna', '183377'), +('40', 'Sétif', 'DZA', 'Sétif', '179055'), +('41', 'Sidi Bel Abbčs', 'DZA', 'Sidi Bel Abbčs', '153106'), +('42', 'Skikda', 'DZA', 'Skikda', '128747'), +('43', 'Biskra', 'DZA', 'Biskra', '128281'), +('44', 'Blida (el-Boulaida)', 'DZA', 'Blida', '127284'), +('45', 'Béjaďa', 'DZA', 'Béjaďa', '117162'), +('46', 'Mostaganem', 'DZA', 'Mostaganem', '115212'), +('47', 'Tébessa', 'DZA', 'Tébessa', '112007'), +('48', 'Tlemcen (Tilimsen)', 'DZA', 'Tlemcen', '110242'), +('49', 'Béchar', 'DZA', 'Béchar', '107311'), +('50', 'Tiaret', 'DZA', 'Tiaret', '100118'), +('51', 'Ech-Chleff (el-Asnam)', 'DZA', 'Chlef', '96794'), +('52', 'Ghardaďa', 'DZA', 'Ghardaďa', '89415'), +('53', 'Tafuna', 'ASM', 'Tutuila', '5200'), +('54', 'Fagatogo', 'ASM', 'Tutuila', '2323'), +('55', 'Andorra la Vella', 'AND', 'Andorra la Vella', '21189'), +('56', 'Luanda', 'AGO', 'Luanda', '2022000'), +('57', 'Huambo', 'AGO', 'Huambo', '163100'), +('58', 'Lobito', 'AGO', 'Benguela', '130000'), +('59', 'Benguela', 'AGO', 'Benguela', '128300'), +('60', 'Namibe', 'AGO', 'Namibe', '118200'), +('61', 'South Hill', 'AIA', '–', '961'), +('62', 'The Valley', 'AIA', '–', '595'), +('63', 'Saint John´s', 'ATG', 'St John', '24000'), +('64', 'Dubai', 'ARE', 'Dubai', '669181'), +('65', 'Abu Dhabi', 'ARE', 'Abu Dhabi', '398695'), +('66', 'Sharja', 'ARE', 'Sharja', '320095'), +('67', 'al-Ayn', 'ARE', 'Abu Dhabi', '225970'), +('68', 'Ajman', 'ARE', 'Ajman', '114395'), +('69', 'Buenos Aires', 'ARG', 'Distrito Federal', '2982146'), +('70', 'La Matanza', 'ARG', 'Buenos Aires', '1266461'), +('71', 'Córdoba', 'ARG', 'Córdoba', '1157507'), +('72', 'Rosario', 'ARG', 'Santa Fé', '907718'), +('73', 'Lomas de Zamora', 'ARG', 'Buenos Aires', '622013'), +('74', 'Quilmes', 'ARG', 'Buenos Aires', '559249'), +('75', 'Almirante Brown', 'ARG', 'Buenos Aires', '538918'), +('76', 'La Plata', 'ARG', 'Buenos Aires', '521936'), +('77', 'Mar del Plata', 'ARG', 'Buenos Aires', '512880'), +('78', 'San Miguel de Tucumán', 'ARG', 'Tucumán', '470809'), +('79', 'Lanús', 'ARG', 'Buenos Aires', '469735'), +('80', 'Merlo', 'ARG', 'Buenos Aires', '463846'), +('81', 'General San Martín', 'ARG', 'Buenos Aires', '422542'), +('82', 'Salta', 'ARG', 'Salta', '367550'), +('83', 'Moreno', 'ARG', 'Buenos Aires', '356993'), +('84', 'Santa Fé', 'ARG', 'Santa Fé', '353063'), +('85', 'Avellaneda', 'ARG', 'Buenos Aires', '353046'), +('86', 'Tres de Febrero', 'ARG', 'Buenos Aires', '352311'), +('87', 'Morón', 'ARG', 'Buenos Aires', '349246'), +('88', 'Florencio Varela', 'ARG', 'Buenos Aires', '315432'), +('89', 'San Isidro', 'ARG', 'Buenos Aires', '306341'), +('90', 'Tigre', 'ARG', 'Buenos Aires', '296226'), +('91', 'Malvinas Argentinas', 'ARG', 'Buenos Aires', '290335'), +('92', 'Vicente López', 'ARG', 'Buenos Aires', '288341'), +('93', 'Berazategui', 'ARG', 'Buenos Aires', '276916'), +('94', 'Corrientes', 'ARG', 'Corrientes', '258103'), +('95', 'San Miguel', 'ARG', 'Buenos Aires', '248700'), +('96', 'Bahía Blanca', 'ARG', 'Buenos Aires', '239810'), +('97', 'Esteban Echeverría', 'ARG', 'Buenos Aires', '235760'), +('98', 'Resistencia', 'ARG', 'Chaco', '229212'), +('99', 'José C. Paz', 'ARG', 'Buenos Aires', '221754'), +('100', 'Paraná', 'ARG', 'Entre Rios', '207041'), +('101', 'Godoy Cruz', 'ARG', 'Mendoza', '206998'), +('102', 'Posadas', 'ARG', 'Misiones', '201273'), +('103', 'Guaymallén', 'ARG', 'Mendoza', '200595'), +('104', 'Santiago del Estero', 'ARG', 'Santiago del Estero', '189947'), +('105', 'San Salvador de Jujuy', 'ARG', 'Jujuy', '178748'), +('106', 'Hurlingham', 'ARG', 'Buenos Aires', '170028'), +('107', 'Neuquén', 'ARG', 'Neuquén', '167296'), +('108', 'Ituzaingó', 'ARG', 'Buenos Aires', '158197'), +('109', 'San Fernando', 'ARG', 'Buenos Aires', '153036'), +('110', 'Formosa', 'ARG', 'Formosa', '147636'), +('111', 'Las Heras', 'ARG', 'Mendoza', '145823'), +('112', 'La Rioja', 'ARG', 'La Rioja', '138117'), +('113', 'San Fernando del Valle de Cata', 'ARG', 'Catamarca', '134935'), +('114', 'Río Cuarto', 'ARG', 'Córdoba', '134355'), +('115', 'Comodoro Rivadavia', 'ARG', 'Chubut', '124104'), +('116', 'Mendoza', 'ARG', 'Mendoza', '123027'), +('117', 'San Nicolás de los Arroyos', 'ARG', 'Buenos Aires', '119302'), +('118', 'San Juan', 'ARG', 'San Juan', '119152'), +('119', 'Escobar', 'ARG', 'Buenos Aires', '116675'), +('120', 'Concordia', 'ARG', 'Entre Rios', '116485'), +('121', 'Pilar', 'ARG', 'Buenos Aires', '113428'), +('122', 'San Luis', 'ARG', 'San Luis', '110136'), +('123', 'Ezeiza', 'ARG', 'Buenos Aires', '99578'), +('124', 'San Rafael', 'ARG', 'Mendoza', '94651'), +('125', 'Tandil', 'ARG', 'Buenos Aires', '91101'), +('126', 'Yerevan', 'ARM', 'Yerevan', '1248700'), +('127', 'Gjumri', 'ARM', 'Širak', '211700'), +('128', 'Vanadzor', 'ARM', 'Lori', '172700'), +('129', 'Oranjestad', 'ABW', '–', '29034'), +('130', 'Sydney', 'AUS', 'New South Wales', '3276207'), +('131', 'Melbourne', 'AUS', 'Victoria', '2865329'), +('132', 'Brisbane', 'AUS', 'Queensland', '1291117'), +('133', 'Perth', 'AUS', 'West Australia', '1096829'), +('134', 'Adelaide', 'AUS', 'South Australia', '978100'), +('135', 'Canberra', 'AUS', 'Capital Region', '322723'), +('136', 'Gold Coast', 'AUS', 'Queensland', '311932'), +('137', 'Newcastle', 'AUS', 'New South Wales', '270324'), +('138', 'Central Coast', 'AUS', 'New South Wales', '227657'), +('139', 'Wollongong', 'AUS', 'New South Wales', '219761'), +('140', 'Hobart', 'AUS', 'Tasmania', '126118'), +('141', 'Geelong', 'AUS', 'Victoria', '125382'), +('142', 'Townsville', 'AUS', 'Queensland', '109914'), +('143', 'Cairns', 'AUS', 'Queensland', '92273'), +('144', 'Baku', 'AZE', 'Baki', '1787800'), +('145', 'Gäncä', 'AZE', 'Gäncä', '299300'), +('146', 'Sumqayit', 'AZE', 'Sumqayit', '283000'), +('147', 'Mingäçevir', 'AZE', 'Mingäçevir', '93900'), +('148', 'Nassau', 'BHS', 'New Providence', '172000'), +('149', 'al-Manama', 'BHR', 'al-Manama', '148000'), +('150', 'Dhaka', 'BGD', 'Dhaka', '3612850'), +('151', 'Chittagong', 'BGD', 'Chittagong', '1392860'), +('152', 'Khulna', 'BGD', 'Khulna', '663340'), +('153', 'Rajshahi', 'BGD', 'Rajshahi', '294056'), +('154', 'Narayanganj', 'BGD', 'Dhaka', '202134'), +('155', 'Rangpur', 'BGD', 'Rajshahi', '191398'), +('156', 'Mymensingh', 'BGD', 'Dhaka', '188713'), +('157', 'Barisal', 'BGD', 'Barisal', '170232'), +('158', 'Tungi', 'BGD', 'Dhaka', '168702'), +('159', 'Jessore', 'BGD', 'Khulna', '139710'), +('160', 'Comilla', 'BGD', 'Chittagong', '135313'), +('161', 'Nawabganj', 'BGD', 'Rajshahi', '130577'), +('162', 'Dinajpur', 'BGD', 'Rajshahi', '127815'), +('163', 'Bogra', 'BGD', 'Rajshahi', '120170'), +('164', 'Sylhet', 'BGD', 'Sylhet', '117396'), +('165', 'Brahmanbaria', 'BGD', 'Chittagong', '109032'), +('166', 'Tangail', 'BGD', 'Dhaka', '106004'), +('167', 'Jamalpur', 'BGD', 'Dhaka', '103556'), +('168', 'Pabna', 'BGD', 'Rajshahi', '103277'), +('169', 'Naogaon', 'BGD', 'Rajshahi', '101266'), +('170', 'Sirajganj', 'BGD', 'Rajshahi', '99669'), +('171', 'Narsinghdi', 'BGD', 'Dhaka', '98342'), +('172', 'Saidpur', 'BGD', 'Rajshahi', '96777'), +('173', 'Gazipur', 'BGD', 'Dhaka', '96717'), +('174', 'Bridgetown', 'BRB', 'St Michael', '6070'), +('175', 'Antwerpen', 'BEL', 'Antwerpen', '446525'), +('176', 'Gent', 'BEL', 'East Flanderi', '224180'), +('177', 'Charleroi', 'BEL', 'Hainaut', '200827'), +('178', 'Ličge', 'BEL', 'Ličge', '185639'), +('179', 'Bruxelles [Brussel]', 'BEL', 'Bryssel', '133859'), +('180', 'Brugge', 'BEL', 'West Flanderi', '116246'), +('181', 'Schaerbeek', 'BEL', 'Bryssel', '105692'), +('182', 'Namur', 'BEL', 'Namur', '105419'), +('183', 'Mons', 'BEL', 'Hainaut', '90935'), +('184', 'Belize City', 'BLZ', 'Belize City', '55810'), +('185', 'Belmopan', 'BLZ', 'Cayo', '7105'), +('186', 'Cotonou', 'BEN', 'Atlantique', '536827'), +('187', 'Porto-Novo', 'BEN', 'Ouémé', '194000'), +('188', 'Djougou', 'BEN', 'Atacora', '134099'), +('189', 'Parakou', 'BEN', 'Borgou', '103577'), +('190', 'Saint George', 'BMU', 'Saint George´s', '1800'), +('191', 'Hamilton', 'BMU', 'Hamilton', '1200'), +('192', 'Thimphu', 'BTN', 'Thimphu', '22000'), +('193', 'Santa Cruz de la Sierra', 'BOL', 'Santa Cruz', '935361'), +('194', 'La Paz', 'BOL', 'La Paz', '758141'), +('195', 'El Alto', 'BOL', 'La Paz', '534466'), +('196', 'Cochabamba', 'BOL', 'Cochabamba', '482800'), +('197', 'Oruro', 'BOL', 'Oruro', '223553'), +('198', 'Sucre', 'BOL', 'Chuquisaca', '178426'), +('199', 'Potosí', 'BOL', 'Potosí', '140642'), +('200', 'Tarija', 'BOL', 'Tarija', '125255'), +('201', 'Sarajevo', 'BIH', 'Federaatio', '360000'), +('202', 'Banja Luka', 'BIH', 'Republika Srpska', '143079'), +('203', 'Zenica', 'BIH', 'Federaatio', '96027'), +('204', 'Gaborone', 'BWA', 'Gaborone', '213017'), +('205', 'Francistown', 'BWA', 'Francistown', '101805'), +('206', 'Săo Paulo', 'BRA', 'Săo Paulo', '9968485'), +('207', 'Rio de Janeiro', 'BRA', 'Rio de Janeiro', '5598953'), +('208', 'Salvador', 'BRA', 'Bahia', '2302832'), +('209', 'Belo Horizonte', 'BRA', 'Minas Gerais', '2139125'), +('210', 'Fortaleza', 'BRA', 'Ceará', '2097757'), +('211', 'Brasília', 'BRA', 'Distrito Federal', '1969868'), +('212', 'Curitiba', 'BRA', 'Paraná', '1584232'), +('213', 'Recife', 'BRA', 'Pernambuco', '1378087'), +('214', 'Porto Alegre', 'BRA', 'Rio Grande do Sul', '1314032'), +('215', 'Manaus', 'BRA', 'Amazonas', '1255049'), +('216', 'Belém', 'BRA', 'Pará', '1186926'), +('217', 'Guarulhos', 'BRA', 'Săo Paulo', '1095874'), +('218', 'Goiânia', 'BRA', 'Goiás', '1056330'), +('219', 'Campinas', 'BRA', 'Săo Paulo', '950043'), +('220', 'Săo Gonçalo', 'BRA', 'Rio de Janeiro', '869254'), +('221', 'Nova Iguaçu', 'BRA', 'Rio de Janeiro', '862225'), +('222', 'Săo Luís', 'BRA', 'Maranhăo', '837588'), +('223', 'Maceió', 'BRA', 'Alagoas', '786288'), +('224', 'Duque de Caxias', 'BRA', 'Rio de Janeiro', '746758'), +('225', 'Săo Bernardo do Campo', 'BRA', 'Săo Paulo', '723132'), +('226', 'Teresina', 'BRA', 'Piauí', '691942'), +('227', 'Natal', 'BRA', 'Rio Grande do Norte', '688955'), +('228', 'Osasco', 'BRA', 'Săo Paulo', '659604'), +('229', 'Campo Grande', 'BRA', 'Mato Grosso do Sul', '649593'), +('230', 'Santo André', 'BRA', 'Săo Paulo', '630073'), +('231', 'Joăo Pessoa', 'BRA', 'Paraíba', '584029'), +('232', 'Jaboatăo dos Guararapes', 'BRA', 'Pernambuco', '558680'), +('233', 'Contagem', 'BRA', 'Minas Gerais', '520801'), +('234', 'Săo José dos Campos', 'BRA', 'Săo Paulo', '515553'), +('235', 'Uberlândia', 'BRA', 'Minas Gerais', '487222'), +('236', 'Feira de Santana', 'BRA', 'Bahia', '479992'), +('237', 'Ribeirăo Preto', 'BRA', 'Săo Paulo', '473276'), +('238', 'Sorocaba', 'BRA', 'Săo Paulo', '466823'), +('239', 'Niterói', 'BRA', 'Rio de Janeiro', '459884'), +('240', 'Cuiabá', 'BRA', 'Mato Grosso', '453813'), +('241', 'Juiz de Fora', 'BRA', 'Minas Gerais', '450288'), +('242', 'Aracaju', 'BRA', 'Sergipe', '445555'), +('243', 'Săo Joăo de Meriti', 'BRA', 'Rio de Janeiro', '440052'), +('244', 'Londrina', 'BRA', 'Paraná', '432257'), +('245', 'Joinville', 'BRA', 'Santa Catarina', '428011'), +('246', 'Belford Roxo', 'BRA', 'Rio de Janeiro', '425194'), +('247', 'Santos', 'BRA', 'Săo Paulo', '408748'), +('248', 'Ananindeua', 'BRA', 'Pará', '400940'), +('249', 'Campos dos Goytacazes', 'BRA', 'Rio de Janeiro', '398418'), +('250', 'Mauá', 'BRA', 'Săo Paulo', '375055'), +('251', 'Carapicuíba', 'BRA', 'Săo Paulo', '357552'), +('252', 'Olinda', 'BRA', 'Pernambuco', '354732'), +('253', 'Campina Grande', 'BRA', 'Paraíba', '352497'), +('254', 'Săo José do Rio Preto', 'BRA', 'Săo Paulo', '351944'), +('255', 'Caxias do Sul', 'BRA', 'Rio Grande do Sul', '349581'), +('256', 'Moji das Cruzes', 'BRA', 'Săo Paulo', '339194'), +('257', 'Diadema', 'BRA', 'Săo Paulo', '335078'), +('258', 'Aparecida de Goiânia', 'BRA', 'Goiás', '324662'), +('259', 'Piracicaba', 'BRA', 'Săo Paulo', '319104'), +('260', 'Cariacica', 'BRA', 'Espírito Santo', '319033'), +('261', 'Vila Velha', 'BRA', 'Espírito Santo', '318758'), +('262', 'Pelotas', 'BRA', 'Rio Grande do Sul', '315415'), +('263', 'Bauru', 'BRA', 'Săo Paulo', '313670'), +('264', 'Porto Velho', 'BRA', 'Rondônia', '309750'), +('265', 'Serra', 'BRA', 'Espírito Santo', '302666'), +('266', 'Betim', 'BRA', 'Minas Gerais', '302108'), +('267', 'Jundíaí', 'BRA', 'Săo Paulo', '296127'), +('268', 'Canoas', 'BRA', 'Rio Grande do Sul', '294125'), +('269', 'Franca', 'BRA', 'Săo Paulo', '290139'), +('270', 'Săo Vicente', 'BRA', 'Săo Paulo', '286848'), +('271', 'Maringá', 'BRA', 'Paraná', '286461'), +('272', 'Montes Claros', 'BRA', 'Minas Gerais', '286058'), +('273', 'Anápolis', 'BRA', 'Goiás', '282197'), +('274', 'Florianópolis', 'BRA', 'Santa Catarina', '281928'), +('275', 'Petrópolis', 'BRA', 'Rio de Janeiro', '279183'), +('276', 'Itaquaquecetuba', 'BRA', 'Săo Paulo', '270874'), +('277', 'Vitória', 'BRA', 'Espírito Santo', '270626'), +('278', 'Ponta Grossa', 'BRA', 'Paraná', '268013'), +('279', 'Rio Branco', 'BRA', 'Acre', '259537'), +('280', 'Foz do Iguaçu', 'BRA', 'Paraná', '259425'), +('281', 'Macapá', 'BRA', 'Amapá', '256033'), +('282', 'Ilhéus', 'BRA', 'Bahia', '254970'), +('283', 'Vitória da Conquista', 'BRA', 'Bahia', '253587'), +('284', 'Uberaba', 'BRA', 'Minas Gerais', '249225'), +('285', 'Paulista', 'BRA', 'Pernambuco', '248473'), +('286', 'Limeira', 'BRA', 'Săo Paulo', '245497'), +('287', 'Blumenau', 'BRA', 'Santa Catarina', '244379'), +('288', 'Caruaru', 'BRA', 'Pernambuco', '244247'), +('289', 'Santarém', 'BRA', 'Pará', '241771'), +('290', 'Volta Redonda', 'BRA', 'Rio de Janeiro', '240315'), +('291', 'Novo Hamburgo', 'BRA', 'Rio Grande do Sul', '239940'), +('292', 'Caucaia', 'BRA', 'Ceará', '238738'), +('293', 'Santa Maria', 'BRA', 'Rio Grande do Sul', '238473'), +('294', 'Cascavel', 'BRA', 'Paraná', '237510'), +('295', 'Guarujá', 'BRA', 'Săo Paulo', '237206'), +('296', 'Ribeirăo das Neves', 'BRA', 'Minas Gerais', '232685'), +('297', 'Governador Valadares', 'BRA', 'Minas Gerais', '231724'), +('298', 'Taubaté', 'BRA', 'Săo Paulo', '229130'), +('299', 'Imperatriz', 'BRA', 'Maranhăo', '224564'), +('300', 'Gravataí', 'BRA', 'Rio Grande do Sul', '223011'), +('301', 'Embu', 'BRA', 'Săo Paulo', '222223'), +('302', 'Mossoró', 'BRA', 'Rio Grande do Norte', '214901'), +('303', 'Várzea Grande', 'BRA', 'Mato Grosso', '214435'), +('304', 'Petrolina', 'BRA', 'Pernambuco', '210540'), +('305', 'Barueri', 'BRA', 'Săo Paulo', '208426'), +('306', 'Viamăo', 'BRA', 'Rio Grande do Sul', '207557'), +('307', 'Ipatinga', 'BRA', 'Minas Gerais', '206338'), +('308', 'Juazeiro', 'BRA', 'Bahia', '201073'), +('309', 'Juazeiro do Norte', 'BRA', 'Ceará', '199636'), +('310', 'Taboăo da Serra', 'BRA', 'Săo Paulo', '197550'), +('311', 'Săo José dos Pinhais', 'BRA', 'Paraná', '196884'), +('312', 'Magé', 'BRA', 'Rio de Janeiro', '196147'), +('313', 'Suzano', 'BRA', 'Săo Paulo', '195434'), +('314', 'Săo Leopoldo', 'BRA', 'Rio Grande do Sul', '189258'), +('315', 'Marília', 'BRA', 'Săo Paulo', '188691'), +('316', 'Săo Carlos', 'BRA', 'Săo Paulo', '187122'), +('317', 'Sumaré', 'BRA', 'Săo Paulo', '186205'), +('318', 'Presidente Prudente', 'BRA', 'Săo Paulo', '185340'), +('319', 'Divinópolis', 'BRA', 'Minas Gerais', '185047'), +('320', 'Sete Lagoas', 'BRA', 'Minas Gerais', '182984'), +('321', 'Rio Grande', 'BRA', 'Rio Grande do Sul', '182222'), +('322', 'Itabuna', 'BRA', 'Bahia', '182148'), +('323', 'Jequié', 'BRA', 'Bahia', '179128'), +('324', 'Arapiraca', 'BRA', 'Alagoas', '178988'), +('325', 'Colombo', 'BRA', 'Paraná', '177764'), +('326', 'Americana', 'BRA', 'Săo Paulo', '177409'), +('327', 'Alvorada', 'BRA', 'Rio Grande do Sul', '175574'), +('328', 'Araraquara', 'BRA', 'Săo Paulo', '174381'), +('329', 'Itaboraí', 'BRA', 'Rio de Janeiro', '173977'), +('330', 'Santa Bárbara d´Oeste', 'BRA', 'Săo Paulo', '171657'), +('331', 'Nova Friburgo', 'BRA', 'Rio de Janeiro', '170697'), +('332', 'Jacareí', 'BRA', 'Săo Paulo', '170356'), +('333', 'Araçatuba', 'BRA', 'Săo Paulo', '169303'), +('334', 'Barra Mansa', 'BRA', 'Rio de Janeiro', '168953'), +('335', 'Praia Grande', 'BRA', 'Săo Paulo', '168434'), +('336', 'Marabá', 'BRA', 'Pará', '167795'), +('337', 'Criciúma', 'BRA', 'Santa Catarina', '167661'), +('338', 'Boa Vista', 'BRA', 'Roraima', '167185'), +('339', 'Passo Fundo', 'BRA', 'Rio Grande do Sul', '166343'), +('340', 'Dourados', 'BRA', 'Mato Grosso do Sul', '164716'), +('341', 'Santa Luzia', 'BRA', 'Minas Gerais', '164704'), +('342', 'Rio Claro', 'BRA', 'Săo Paulo', '163551'), +('343', 'Maracanaú', 'BRA', 'Ceará', '162022'), +('344', 'Guarapuava', 'BRA', 'Paraná', '160510'), +('345', 'Rondonópolis', 'BRA', 'Mato Grosso', '155115'), +('346', 'Săo José', 'BRA', 'Santa Catarina', '155105'), +('347', 'Cachoeiro de Itapemirim', 'BRA', 'Espírito Santo', '155024'), +('348', 'Nilópolis', 'BRA', 'Rio de Janeiro', '153383'), +('349', 'Itapevi', 'BRA', 'Săo Paulo', '150664'), +('350', 'Cabo de Santo Agostinho', 'BRA', 'Pernambuco', '149964'), +('351', 'Camaçari', 'BRA', 'Bahia', '149146'), +('352', 'Sobral', 'BRA', 'Ceará', '146005'), +('353', 'Itajaí', 'BRA', 'Santa Catarina', '145197'), +('354', 'Chapecó', 'BRA', 'Santa Catarina', '144158'), +('355', 'Cotia', 'BRA', 'Săo Paulo', '140042'), +('356', 'Lages', 'BRA', 'Santa Catarina', '139570'), +('357', 'Ferraz de Vasconcelos', 'BRA', 'Săo Paulo', '139283'), +('358', 'Indaiatuba', 'BRA', 'Săo Paulo', '135968'), +('359', 'Hortolândia', 'BRA', 'Săo Paulo', '135755'), +('360', 'Caxias', 'BRA', 'Maranhăo', '133980'), +('361', 'Săo Caetano do Sul', 'BRA', 'Săo Paulo', '133321'), +('362', 'Itu', 'BRA', 'Săo Paulo', '132736'), +('363', 'Nossa Senhora do Socorro', 'BRA', 'Sergipe', '131351'), +('364', 'Parnaíba', 'BRA', 'Piauí', '129756'), +('365', 'Poços de Caldas', 'BRA', 'Minas Gerais', '129683'), +('366', 'Teresópolis', 'BRA', 'Rio de Janeiro', '128079'), +('367', 'Barreiras', 'BRA', 'Bahia', '127801'), +('368', 'Castanhal', 'BRA', 'Pará', '127634'), +('369', 'Alagoinhas', 'BRA', 'Bahia', '126820'), +('370', 'Itapecerica da Serra', 'BRA', 'Săo Paulo', '126672'), +('371', 'Uruguaiana', 'BRA', 'Rio Grande do Sul', '126305'), +('372', 'Paranaguá', 'BRA', 'Paraná', '126076'), +('373', 'Ibirité', 'BRA', 'Minas Gerais', '125982'), +('374', 'Timon', 'BRA', 'Maranhăo', '125812'), +('375', 'Luziânia', 'BRA', 'Goiás', '125597'), +('376', 'Macaé', 'BRA', 'Rio de Janeiro', '125597'), +('377', 'Teófilo Otoni', 'BRA', 'Minas Gerais', '124489'), +('378', 'Moji-Guaçu', 'BRA', 'Săo Paulo', '123782'), +('379', 'Palmas', 'BRA', 'Tocantins', '121919'), +('380', 'Pindamonhangaba', 'BRA', 'Săo Paulo', '121904'), +('381', 'Francisco Morato', 'BRA', 'Săo Paulo', '121197'), +('382', 'Bagé', 'BRA', 'Rio Grande do Sul', '120793'), +('383', 'Sapucaia do Sul', 'BRA', 'Rio Grande do Sul', '120217'), +('384', 'Cabo Frio', 'BRA', 'Rio de Janeiro', '119503'), +('385', 'Itapetininga', 'BRA', 'Săo Paulo', '119391'), +('386', 'Patos de Minas', 'BRA', 'Minas Gerais', '119262'), +('387', 'Camaragibe', 'BRA', 'Pernambuco', '118968'), +('388', 'Bragança Paulista', 'BRA', 'Săo Paulo', '116929'), +('389', 'Queimados', 'BRA', 'Rio de Janeiro', '115020'), +('390', 'Araguaína', 'BRA', 'Tocantins', '114948'), +('391', 'Garanhuns', 'BRA', 'Pernambuco', '114603'), +('392', 'Vitória de Santo Antăo', 'BRA', 'Pernambuco', '113595'), +('393', 'Santa Rita', 'BRA', 'Paraíba', '113135'), +('394', 'Barbacena', 'BRA', 'Minas Gerais', '113079'), +('395', 'Abaetetuba', 'BRA', 'Pará', '111258'), +('396', 'Jaú', 'BRA', 'Săo Paulo', '109965'), +('397', 'Lauro de Freitas', 'BRA', 'Bahia', '109236'), +('398', 'Franco da Rocha', 'BRA', 'Săo Paulo', '108964'), +('399', 'Teixeira de Freitas', 'BRA', 'Bahia', '108441'), +('400', 'Varginha', 'BRA', 'Minas Gerais', '108314'), +('401', 'Ribeirăo Pires', 'BRA', 'Săo Paulo', '108121'), +('402', 'Sabará', 'BRA', 'Minas Gerais', '107781'), +('403', 'Catanduva', 'BRA', 'Săo Paulo', '107761'), +('404', 'Rio Verde', 'BRA', 'Goiás', '107755'), +('405', 'Botucatu', 'BRA', 'Săo Paulo', '107663'), +('406', 'Colatina', 'BRA', 'Espírito Santo', '107354'), +('407', 'Santa Cruz do Sul', 'BRA', 'Rio Grande do Sul', '106734'), +('408', 'Linhares', 'BRA', 'Espírito Santo', '106278'), +('409', 'Apucarana', 'BRA', 'Paraná', '105114'), +('410', 'Barretos', 'BRA', 'Săo Paulo', '104156'), +('411', 'Guaratinguetá', 'BRA', 'Săo Paulo', '103433'), +('412', 'Cachoeirinha', 'BRA', 'Rio Grande do Sul', '103240'), +('413', 'Codó', 'BRA', 'Maranhăo', '103153'), +('414', 'Jaraguá do Sul', 'BRA', 'Santa Catarina', '102580'), +('415', 'Cubatăo', 'BRA', 'Săo Paulo', '102372'), +('416', 'Itabira', 'BRA', 'Minas Gerais', '102217'), +('417', 'Itaituba', 'BRA', 'Pará', '101320'), +('418', 'Araras', 'BRA', 'Săo Paulo', '101046'), +('419', 'Resende', 'BRA', 'Rio de Janeiro', '100627'), +('420', 'Atibaia', 'BRA', 'Săo Paulo', '100356'), +('421', 'Pouso Alegre', 'BRA', 'Minas Gerais', '100028'), +('422', 'Toledo', 'BRA', 'Paraná', '99387'), +('423', 'Crato', 'BRA', 'Ceará', '98965'), +('424', 'Passos', 'BRA', 'Minas Gerais', '98570'), +('425', 'Araguari', 'BRA', 'Minas Gerais', '98399'), +('426', 'Săo José de Ribamar', 'BRA', 'Maranhăo', '98318'), +('427', 'Pinhais', 'BRA', 'Paraná', '98198'), +('428', 'Sertăozinho', 'BRA', 'Săo Paulo', '98140'), +('429', 'Conselheiro Lafaiete', 'BRA', 'Minas Gerais', '97507'), +('430', 'Paulo Afonso', 'BRA', 'Bahia', '97291'), +('431', 'Angra dos Reis', 'BRA', 'Rio de Janeiro', '96864'), +('432', 'Eunápolis', 'BRA', 'Bahia', '96610'), +('433', 'Salto', 'BRA', 'Săo Paulo', '96348'), +('434', 'Ourinhos', 'BRA', 'Săo Paulo', '96291'), +('435', 'Parnamirim', 'BRA', 'Rio Grande do Norte', '96210'), +('436', 'Jacobina', 'BRA', 'Bahia', '96131'), +('437', 'Coronel Fabriciano', 'BRA', 'Minas Gerais', '95933'), +('438', 'Birigui', 'BRA', 'Săo Paulo', '94685'), +('439', 'Tatuí', 'BRA', 'Săo Paulo', '93897'), +('440', 'Ji-Paraná', 'BRA', 'Rondônia', '93346'), +('441', 'Bacabal', 'BRA', 'Maranhăo', '93121'), +('442', 'Cametá', 'BRA', 'Pará', '92779'), +('443', 'Guaíba', 'BRA', 'Rio Grande do Sul', '92224'), +('444', 'Săo Lourenço da Mata', 'BRA', 'Pernambuco', '91999'), +('445', 'Santana do Livramento', 'BRA', 'Rio Grande do Sul', '91779'), +('446', 'Votorantim', 'BRA', 'Săo Paulo', '91777'), +('447', 'Campo Largo', 'BRA', 'Paraná', '91203'), +('448', 'Patos', 'BRA', 'Paraíba', '90519'), +('449', 'Ituiutaba', 'BRA', 'Minas Gerais', '90507'), +('450', 'Corumbá', 'BRA', 'Mato Grosso do Sul', '90111'), +('451', 'Palhoça', 'BRA', 'Santa Catarina', '89465'), +('452', 'Barra do Piraí', 'BRA', 'Rio de Janeiro', '89388'), +('453', 'Bento Gonçalves', 'BRA', 'Rio Grande do Sul', '89254'), +('454', 'Poá', 'BRA', 'Săo Paulo', '89236'), +('455', 'Águas Lindas de Goiás', 'BRA', 'Goiás', '89200'), +('456', 'London', 'GBR', 'England', '7285000'), +('457', 'Birmingham', 'GBR', 'England', '1013000'), +('458', 'Glasgow', 'GBR', 'Scotland', '619680'), +('459', 'Liverpool', 'GBR', 'England', '461000'), +('460', 'Edinburgh', 'GBR', 'Scotland', '450180'), +('461', 'Sheffield', 'GBR', 'England', '431607'), +('462', 'Manchester', 'GBR', 'England', '430000'), +('463', 'Leeds', 'GBR', 'England', '424194'), +('464', 'Bristol', 'GBR', 'England', '402000'), +('465', 'Cardiff', 'GBR', 'Wales', '321000'), +('466', 'Coventry', 'GBR', 'England', '304000'), +('467', 'Leicester', 'GBR', 'England', '294000'), +('468', 'Bradford', 'GBR', 'England', '289376'), +('469', 'Belfast', 'GBR', 'North Ireland', '287500'), +('470', 'Nottingham', 'GBR', 'England', '287000'), +('471', 'Kingston upon Hull', 'GBR', 'England', '262000'), +('472', 'Plymouth', 'GBR', 'England', '253000'), +('473', 'Stoke-on-Trent', 'GBR', 'England', '252000'), +('474', 'Wolverhampton', 'GBR', 'England', '242000'), +('475', 'Derby', 'GBR', 'England', '236000'), +('476', 'Swansea', 'GBR', 'Wales', '230000'), +('477', 'Southampton', 'GBR', 'England', '216000'), +('478', 'Aberdeen', 'GBR', 'Scotland', '213070'), +('479', 'Northampton', 'GBR', 'England', '196000'), +('480', 'Dudley', 'GBR', 'England', '192171'), +('481', 'Portsmouth', 'GBR', 'England', '190000'), +('482', 'Newcastle upon Tyne', 'GBR', 'England', '189150'), +('483', 'Sunderland', 'GBR', 'England', '183310'), +('484', 'Luton', 'GBR', 'England', '183000'), +('485', 'Swindon', 'GBR', 'England', '180000'), +('486', 'Southend-on-Sea', 'GBR', 'England', '176000'), +('487', 'Walsall', 'GBR', 'England', '174739'), +('488', 'Bournemouth', 'GBR', 'England', '162000'), +('489', 'Peterborough', 'GBR', 'England', '156000'), +('490', 'Brighton', 'GBR', 'England', '156124'), +('491', 'Blackpool', 'GBR', 'England', '151000'), +('492', 'Dundee', 'GBR', 'Scotland', '146690'), +('493', 'West Bromwich', 'GBR', 'England', '146386'), +('494', 'Reading', 'GBR', 'England', '148000'), +('495', 'Oldbury/Smethwick (Warley)', 'GBR', 'England', '145542'), +('496', 'Middlesbrough', 'GBR', 'England', '145000'), +('497', 'Huddersfield', 'GBR', 'England', '143726'), +('498', 'Oxford', 'GBR', 'England', '144000'), +('499', 'Poole', 'GBR', 'England', '141000'), +('500', 'Bolton', 'GBR', 'England', '139020'), +('501', 'Blackburn', 'GBR', 'England', '140000'), +('502', 'Newport', 'GBR', 'Wales', '139000'), +('503', 'Preston', 'GBR', 'England', '135000'), +('504', 'Stockport', 'GBR', 'England', '132813'), +('505', 'Norwich', 'GBR', 'England', '124000'), +('506', 'Rotherham', 'GBR', 'England', '121380'), +('507', 'Cambridge', 'GBR', 'England', '121000'), +('508', 'Watford', 'GBR', 'England', '113080'), +('509', 'Ipswich', 'GBR', 'England', '114000'), +('510', 'Slough', 'GBR', 'England', '112000'), +('511', 'Exeter', 'GBR', 'England', '111000'), +('512', 'Cheltenham', 'GBR', 'England', '106000'), +('513', 'Gloucester', 'GBR', 'England', '107000'), +('514', 'Saint Helens', 'GBR', 'England', '106293'), +('515', 'Sutton Coldfield', 'GBR', 'England', '106001'), +('516', 'York', 'GBR', 'England', '104425'), +('517', 'Oldham', 'GBR', 'England', '103931'), +('518', 'Basildon', 'GBR', 'England', '100924'), +('519', 'Worthing', 'GBR', 'England', '100000'), +('520', 'Chelmsford', 'GBR', 'England', '97451'), +('521', 'Colchester', 'GBR', 'England', '96063'), +('522', 'Crawley', 'GBR', 'England', '97000'), +('523', 'Gillingham', 'GBR', 'England', '92000'), +('524', 'Solihull', 'GBR', 'England', '94531'), +('525', 'Rochdale', 'GBR', 'England', '94313'), +('526', 'Birkenhead', 'GBR', 'England', '93087'), +('527', 'Worcester', 'GBR', 'England', '95000'), +('528', 'Hartlepool', 'GBR', 'England', '92000'), +('529', 'Halifax', 'GBR', 'England', '91069'), +('530', 'Woking/Byfleet', 'GBR', 'England', '92000'), +('531', 'Southport', 'GBR', 'England', '90959'), +('532', 'Maidstone', 'GBR', 'England', '90878'), +('533', 'Eastbourne', 'GBR', 'England', '90000'), +('534', 'Grimsby', 'GBR', 'England', '89000'), +('535', 'Saint Helier', 'GBR', 'Jersey', '27523'), +('536', 'Douglas', 'GBR', '–', '23487'), +('537', 'Road Town', 'VGB', 'Tortola', '8000'), +('538', 'Bandar Seri Begawan', 'BRN', 'Brunei and Muara', '21484'), +('539', 'Sofija', 'BGR', 'Grad Sofija', '1122302'), +('540', 'Plovdiv', 'BGR', 'Plovdiv', '342584'), +('541', 'Varna', 'BGR', 'Varna', '299801'), +('542', 'Burgas', 'BGR', 'Burgas', '195255'), +('543', 'Ruse', 'BGR', 'Ruse', '166467'), +('544', 'Stara Zagora', 'BGR', 'Haskovo', '147939'), +('545', 'Pleven', 'BGR', 'Lovec', '121952'), +('546', 'Sliven', 'BGR', 'Burgas', '105530'), +('547', 'Dobric', 'BGR', 'Varna', '100399'), +('548', 'Šumen', 'BGR', 'Varna', '94686'), +('549', 'Ouagadougou', 'BFA', 'Kadiogo', '824000'), +('550', 'Bobo-Dioulasso', 'BFA', 'Houet', '300000'), +('551', 'Koudougou', 'BFA', 'Boulkiemdé', '105000'), +('552', 'Bujumbura', 'BDI', 'Bujumbura', '300000'), +('553', 'George Town', 'CYM', 'Grand Cayman', '19600'), +('554', 'Santiago de Chile', 'CHL', 'Santiago', '4703954'), +('555', 'Puente Alto', 'CHL', 'Santiago', '386236'), +('556', 'Vińa del Mar', 'CHL', 'Valparaíso', '312493'), +('557', 'Valparaíso', 'CHL', 'Valparaíso', '293800'), +('558', 'Talcahuano', 'CHL', 'Bíobío', '277752'), +('559', 'Antofagasta', 'CHL', 'Antofagasta', '251429'), +('560', 'San Bernardo', 'CHL', 'Santiago', '241910'), +('561', 'Temuco', 'CHL', 'La Araucanía', '233041'), +('562', 'Concepción', 'CHL', 'Bíobío', '217664'), +('563', 'Rancagua', 'CHL', 'O´Higgins', '212977'), +('564', 'Arica', 'CHL', 'Tarapacá', '189036'), +('565', 'Talca', 'CHL', 'Maule', '187557'), +('566', 'Chillán', 'CHL', 'Bíobío', '178182'), +('567', 'Iquique', 'CHL', 'Tarapacá', '177892'), +('568', 'Los Angeles', 'CHL', 'Bíobío', '158215'), +('569', 'Puerto Montt', 'CHL', 'Los Lagos', '152194'), +('570', 'Coquimbo', 'CHL', 'Coquimbo', '143353'), +('571', 'Osorno', 'CHL', 'Los Lagos', '141468'), +('572', 'La Serena', 'CHL', 'Coquimbo', '137409'), +('573', 'Calama', 'CHL', 'Antofagasta', '137265'), +('574', 'Valdivia', 'CHL', 'Los Lagos', '133106'), +('575', 'Punta Arenas', 'CHL', 'Magallanes', '125631'), +('576', 'Copiapó', 'CHL', 'Atacama', '120128'), +('577', 'Quilpué', 'CHL', 'Valparaíso', '118857'), +('578', 'Curicó', 'CHL', 'Maule', '115766'), +('579', 'Ovalle', 'CHL', 'Coquimbo', '94854'), +('580', 'Coronel', 'CHL', 'Bíobío', '93061'), +('581', 'San Pedro de la Paz', 'CHL', 'Bíobío', '91684'), +('582', 'Melipilla', 'CHL', 'Santiago', '91056'), +('583', 'Avarua', 'COK', 'Rarotonga', '11900'), +('584', 'San José', 'CRI', 'San José', '339131'), +('585', 'Djibouti', 'DJI', 'Djibouti', '383000'), +('586', 'Roseau', 'DMA', 'St George', '16243'), +('587', 'Santo Domingo de Guzmán', 'DOM', 'Distrito Nacional', '1609966'), +('588', 'Santiago de los Caballeros', 'DOM', 'Santiago', '365463'), +('589', 'La Romana', 'DOM', 'La Romana', '140204'), +('590', 'San Pedro de Macorís', 'DOM', 'San Pedro de Macorís', '124735'), +('591', 'San Francisco de Macorís', 'DOM', 'Duarte', '108485'), +('592', 'San Felipe de Puerto Plata', 'DOM', 'Puerto Plata', '89423'), +('593', 'Guayaquil', 'ECU', 'Guayas', '2070040'), +('594', 'Quito', 'ECU', 'Pichincha', '1573458'), +('595', 'Cuenca', 'ECU', 'Azuay', '270353'), +('596', 'Machala', 'ECU', 'El Oro', '210368'), +('597', 'Santo Domingo de los Colorados', 'ECU', 'Pichincha', '202111'), +('598', 'Portoviejo', 'ECU', 'Manabí', '176413'), +('599', 'Ambato', 'ECU', 'Tungurahua', '169612'), +('600', 'Manta', 'ECU', 'Manabí', '164739'), +('601', 'Duran [Eloy Alfaro]', 'ECU', 'Guayas', '152514'), +('602', 'Ibarra', 'ECU', 'Imbabura', '130643'), +('603', 'Quevedo', 'ECU', 'Los Ríos', '129631'), +('604', 'Milagro', 'ECU', 'Guayas', '124177'), +('605', 'Loja', 'ECU', 'Loja', '123875'), +('606', 'Ríobamba', 'ECU', 'Chimborazo', '123163'), +('607', 'Esmeraldas', 'ECU', 'Esmeraldas', '123045'), +('608', 'Cairo', 'EGY', 'Kairo', '6789479'), +('609', 'Alexandria', 'EGY', 'Aleksandria', '3328196'), +('610', 'Giza', 'EGY', 'Giza', '2221868'), +('611', 'Shubra al-Khayma', 'EGY', 'al-Qalyubiya', '870716'), +('612', 'Port Said', 'EGY', 'Port Said', '469533'), +('613', 'Suez', 'EGY', 'Suez', '417610'), +('614', 'al-Mahallat al-Kubra', 'EGY', 'al-Gharbiya', '395402'), +('615', 'Tanta', 'EGY', 'al-Gharbiya', '371010'), +('616', 'al-Mansura', 'EGY', 'al-Daqahliya', '369621'), +('617', 'Luxor', 'EGY', 'Luxor', '360503'), +('618', 'Asyut', 'EGY', 'Asyut', '343498'), +('619', 'Bahtim', 'EGY', 'al-Qalyubiya', '275807'), +('620', 'Zagazig', 'EGY', 'al-Sharqiya', '267351'), +('621', 'al-Faiyum', 'EGY', 'al-Faiyum', '260964'), +('622', 'Ismailia', 'EGY', 'Ismailia', '254477'), +('623', 'Kafr al-Dawwar', 'EGY', 'al-Buhayra', '231978'), +('624', 'Assuan', 'EGY', 'Assuan', '219017'), +('625', 'Damanhur', 'EGY', 'al-Buhayra', '212203'), +('626', 'al-Minya', 'EGY', 'al-Minya', '201360'), +('627', 'Bani Suwayf', 'EGY', 'Bani Suwayf', '172032'), +('628', 'Qina', 'EGY', 'Qina', '171275'), +('629', 'Sawhaj', 'EGY', 'Sawhaj', '170125'), +('630', 'Shibin al-Kawm', 'EGY', 'al-Minufiya', '159909'), +('631', 'Bulaq al-Dakrur', 'EGY', 'Giza', '148787'), +('632', 'Banha', 'EGY', 'al-Qalyubiya', '145792'), +('633', 'Warraq al-Arab', 'EGY', 'Giza', '127108'), +('634', 'Kafr al-Shaykh', 'EGY', 'Kafr al-Shaykh', '124819'), +('635', 'Mallawi', 'EGY', 'al-Minya', '119283'), +('636', 'Bilbays', 'EGY', 'al-Sharqiya', '113608'), +('637', 'Mit Ghamr', 'EGY', 'al-Daqahliya', '101801'), +('638', 'al-Arish', 'EGY', 'Shamal Sina', '100447'), +('639', 'Talkha', 'EGY', 'al-Daqahliya', '97700'), +('640', 'Qalyub', 'EGY', 'al-Qalyubiya', '97200'), +('641', 'Jirja', 'EGY', 'Sawhaj', '95400'), +('642', 'Idfu', 'EGY', 'Qina', '94200'), +('643', 'al-Hawamidiya', 'EGY', 'Giza', '91700'), +('644', 'Disuq', 'EGY', 'Kafr al-Shaykh', '91300'), +('645', 'San Salvador', 'SLV', 'San Salvador', '415346'), +('646', 'Santa Ana', 'SLV', 'Santa Ana', '139389'), +('647', 'Mejicanos', 'SLV', 'San Salvador', '138800'), +('648', 'Soyapango', 'SLV', 'San Salvador', '129800'), +('649', 'San Miguel', 'SLV', 'San Miguel', '127696'), +('650', 'Nueva San Salvador', 'SLV', 'La Libertad', '98400'), +('651', 'Apopa', 'SLV', 'San Salvador', '88800'), +('652', 'Asmara', 'ERI', 'Maekel', '431000'), +('653', 'Madrid', 'ESP', 'Madrid', '2879052'), +('654', 'Barcelona', 'ESP', 'Katalonia', '1503451'), +('655', 'Valencia', 'ESP', 'Valencia', '739412'), +('656', 'Sevilla', 'ESP', 'Andalusia', '701927'), +('657', 'Zaragoza', 'ESP', 'Aragonia', '603367'), +('658', 'Málaga', 'ESP', 'Andalusia', '530553'), +('659', 'Bilbao', 'ESP', 'Baskimaa', '357589'), +('660', 'Las Palmas de Gran Canaria', 'ESP', 'Canary Islands', '354757'), +('661', 'Murcia', 'ESP', 'Murcia', '353504'), +('662', 'Palma de Mallorca', 'ESP', 'Balears', '326993'), +('663', 'Valladolid', 'ESP', 'Castilla and León', '319998'), +('664', 'Córdoba', 'ESP', 'Andalusia', '311708'), +('665', 'Vigo', 'ESP', 'Galicia', '283670'), +('666', 'Alicante [Alacant]', 'ESP', 'Valencia', '272432'), +('667', 'Gijón', 'ESP', 'Asturia', '267980'), +('668', 'L´Hospitalet de Llobregat', 'ESP', 'Katalonia', '247986'), +('669', 'Granada', 'ESP', 'Andalusia', '244767'), +('670', 'A Coruńa (La Coruńa)', 'ESP', 'Galicia', '243402'), +('671', 'Vitoria-Gasteiz', 'ESP', 'Baskimaa', '217154'), +('672', 'Santa Cruz de Tenerife', 'ESP', 'Canary Islands', '213050'), +('673', 'Badalona', 'ESP', 'Katalonia', '209635'), +('674', 'Oviedo', 'ESP', 'Asturia', '200453'), +('675', 'Móstoles', 'ESP', 'Madrid', '195351'), +('676', 'Elche [Elx]', 'ESP', 'Valencia', '193174'), +('677', 'Sabadell', 'ESP', 'Katalonia', '184859'), +('678', 'Santander', 'ESP', 'Cantabria', '184165'), +('679', 'Jerez de la Frontera', 'ESP', 'Andalusia', '182660'), +('680', 'Pamplona [Iruńa]', 'ESP', 'Navarra', '180483'), +('681', 'Donostia-San Sebastián', 'ESP', 'Baskimaa', '179208'), +('682', 'Cartagena', 'ESP', 'Murcia', '177709'), +('683', 'Leganés', 'ESP', 'Madrid', '173163'), +('684', 'Fuenlabrada', 'ESP', 'Madrid', '171173'), +('685', 'Almería', 'ESP', 'Andalusia', '169027'), +('686', 'Terrassa', 'ESP', 'Katalonia', '168695'), +('687', 'Alcalá de Henares', 'ESP', 'Madrid', '164463'), +('688', 'Burgos', 'ESP', 'Castilla and León', '162802'), +('689', 'Salamanca', 'ESP', 'Castilla and León', '158720'), +('690', 'Albacete', 'ESP', 'Kastilia-La Mancha', '147527'), +('691', 'Getafe', 'ESP', 'Madrid', '145371'), +('692', 'Cádiz', 'ESP', 'Andalusia', '142449'), +('693', 'Alcorcón', 'ESP', 'Madrid', '142048'), +('694', 'Huelva', 'ESP', 'Andalusia', '140583'), +('695', 'León', 'ESP', 'Castilla and León', '139809'), +('696', 'Castellón de la Plana [Castell', 'ESP', 'Valencia', '139712'), +('697', 'Badajoz', 'ESP', 'Extremadura', '136613'), +('698', '[San Cristóbal de] la Laguna', 'ESP', 'Canary Islands', '127945'), +('699', 'Logrońo', 'ESP', 'La Rioja', '127093'), +('700', 'Santa Coloma de Gramenet', 'ESP', 'Katalonia', '120802'), +('701', 'Tarragona', 'ESP', 'Katalonia', '113016'), +('702', 'Lleida (Lérida)', 'ESP', 'Katalonia', '112207'), +('703', 'Jaén', 'ESP', 'Andalusia', '109247'), +('704', 'Ourense (Orense)', 'ESP', 'Galicia', '109120'), +('705', 'Mataró', 'ESP', 'Katalonia', '104095'), +('706', 'Algeciras', 'ESP', 'Andalusia', '103106'), +('707', 'Marbella', 'ESP', 'Andalusia', '101144'), +('708', 'Barakaldo', 'ESP', 'Baskimaa', '98212'), +('709', 'Dos Hermanas', 'ESP', 'Andalusia', '94591'), +('710', 'Santiago de Compostela', 'ESP', 'Galicia', '93745'), +('711', 'Torrejón de Ardoz', 'ESP', 'Madrid', '92262'), +('712', 'Cape Town', 'ZAF', 'Western Cape', '2352121'), +('713', 'Soweto', 'ZAF', 'Gauteng', '904165'), +('714', 'Johannesburg', 'ZAF', 'Gauteng', '756653'), +('715', 'Port Elizabeth', 'ZAF', 'Eastern Cape', '752319'), +('716', 'Pretoria', 'ZAF', 'Gauteng', '658630'), +('717', 'Inanda', 'ZAF', 'KwaZulu-Natal', '634065'), +('718', 'Durban', 'ZAF', 'KwaZulu-Natal', '566120'), +('719', 'Vanderbijlpark', 'ZAF', 'Gauteng', '468931'), +('720', 'Kempton Park', 'ZAF', 'Gauteng', '442633'), +('721', 'Alberton', 'ZAF', 'Gauteng', '410102'), +('722', 'Pinetown', 'ZAF', 'KwaZulu-Natal', '378810'), +('723', 'Pietermaritzburg', 'ZAF', 'KwaZulu-Natal', '370190'), +('724', 'Benoni', 'ZAF', 'Gauteng', '365467'), +('725', 'Randburg', 'ZAF', 'Gauteng', '341288'), +('726', 'Umlazi', 'ZAF', 'KwaZulu-Natal', '339233'), +('727', 'Bloemfontein', 'ZAF', 'Free State', '334341'), +('728', 'Vereeniging', 'ZAF', 'Gauteng', '328535'), +('729', 'Wonderboom', 'ZAF', 'Gauteng', '283289'), +('730', 'Roodepoort', 'ZAF', 'Gauteng', '279340'), +('731', 'Boksburg', 'ZAF', 'Gauteng', '262648'), +('732', 'Klerksdorp', 'ZAF', 'North West', '261911'), +('733', 'Soshanguve', 'ZAF', 'Gauteng', '242727'), +('734', 'Newcastle', 'ZAF', 'KwaZulu-Natal', '222993'), +('735', 'East London', 'ZAF', 'Eastern Cape', '221047'), +('736', 'Welkom', 'ZAF', 'Free State', '203296'), +('737', 'Kimberley', 'ZAF', 'Northern Cape', '197254'), +('738', 'Uitenhage', 'ZAF', 'Eastern Cape', '192120'), +('739', 'Chatsworth', 'ZAF', 'KwaZulu-Natal', '189885'), +('740', 'Mdantsane', 'ZAF', 'Eastern Cape', '182639'), +('741', 'Krugersdorp', 'ZAF', 'Gauteng', '181503'), +('742', 'Botshabelo', 'ZAF', 'Free State', '177971'), +('743', 'Brakpan', 'ZAF', 'Gauteng', '171363'), +('744', 'Witbank', 'ZAF', 'Mpumalanga', '167183'), +('745', 'Oberholzer', 'ZAF', 'Gauteng', '164367'), +('746', 'Germiston', 'ZAF', 'Gauteng', '164252'), +('747', 'Springs', 'ZAF', 'Gauteng', '162072'), +('748', 'Westonaria', 'ZAF', 'Gauteng', '159632'), +('749', 'Randfontein', 'ZAF', 'Gauteng', '120838'), +('750', 'Paarl', 'ZAF', 'Western Cape', '105768'), +('751', 'Potchefstroom', 'ZAF', 'North West', '101817'), +('752', 'Rustenburg', 'ZAF', 'North West', '97008'), +('753', 'Nigel', 'ZAF', 'Gauteng', '96734'), +('754', 'George', 'ZAF', 'Western Cape', '93818'), +('755', 'Ladysmith', 'ZAF', 'KwaZulu-Natal', '89292'), +('756', 'Addis Abeba', 'ETH', 'Addis Abeba', '2495000'), +('757', 'Dire Dawa', 'ETH', 'Dire Dawa', '164851'), +('758', 'Nazret', 'ETH', 'Oromia', '127842'), +('759', 'Gonder', 'ETH', 'Amhara', '112249'), +('760', 'Dese', 'ETH', 'Amhara', '97314'), +('761', 'Mekele', 'ETH', 'Tigray', '96938'), +('762', 'Bahir Dar', 'ETH', 'Amhara', '96140'), +('763', 'Stanley', 'FLK', 'East Falkland', '1636'), +('764', 'Suva', 'FJI', 'Central', '77366'), +('765', 'Quezon', 'PHL', 'National Capital Reg', '2173831'), +('766', 'Manila', 'PHL', 'National Capital Reg', '1581082'), +('767', 'Kalookan', 'PHL', 'National Capital Reg', '1177604'), +('768', 'Davao', 'PHL', 'Southern Mindanao', '1147116'), +('769', 'Cebu', 'PHL', 'Central Visayas', '718821'), +('770', 'Zamboanga', 'PHL', 'Western Mindanao', '601794'), +('771', 'Pasig', 'PHL', 'National Capital Reg', '505058'), +('772', 'Valenzuela', 'PHL', 'National Capital Reg', '485433'), +('773', 'Las Pińas', 'PHL', 'National Capital Reg', '472780'), +('774', 'Antipolo', 'PHL', 'Southern Tagalog', '470866'), +('775', 'Taguig', 'PHL', 'National Capital Reg', '467375'), +('776', 'Cagayan de Oro', 'PHL', 'Northern Mindanao', '461877'), +('777', 'Parańaque', 'PHL', 'National Capital Reg', '449811'), +('778', 'Makati', 'PHL', 'National Capital Reg', '444867'), +('779', 'Bacolod', 'PHL', 'Western Visayas', '429076'), +('780', 'General Santos', 'PHL', 'Southern Mindanao', '411822'), +('781', 'Marikina', 'PHL', 'National Capital Reg', '391170'), +('782', 'Dasmarińas', 'PHL', 'Southern Tagalog', '379520'), +('783', 'Muntinlupa', 'PHL', 'National Capital Reg', '379310'), +('784', 'Iloilo', 'PHL', 'Western Visayas', '365820'), +('785', 'Pasay', 'PHL', 'National Capital Reg', '354908'), +('786', 'Malabon', 'PHL', 'National Capital Reg', '338855'), +('787', 'San José del Monte', 'PHL', 'Central Luzon', '315807'), +('788', 'Bacoor', 'PHL', 'Southern Tagalog', '305699'), +('789', 'Iligan', 'PHL', 'Central Mindanao', '285061'), +('790', 'Calamba', 'PHL', 'Southern Tagalog', '281146'), +('791', 'Mandaluyong', 'PHL', 'National Capital Reg', '278474'), +('792', 'Butuan', 'PHL', 'Caraga', '267279'), +('793', 'Angeles', 'PHL', 'Central Luzon', '263971'), +('794', 'Tarlac', 'PHL', 'Central Luzon', '262481'), +('795', 'Mandaue', 'PHL', 'Central Visayas', '259728'), +('796', 'Baguio', 'PHL', 'CAR', '252386'), +('797', 'Batangas', 'PHL', 'Southern Tagalog', '247588'), +('798', 'Cainta', 'PHL', 'Southern Tagalog', '242511'), +('799', 'San Pedro', 'PHL', 'Southern Tagalog', '231403'), +('800', 'Navotas', 'PHL', 'National Capital Reg', '230403'), +('801', 'Cabanatuan', 'PHL', 'Central Luzon', '222859'), +('802', 'San Fernando', 'PHL', 'Central Luzon', '221857'), +('803', 'Lipa', 'PHL', 'Southern Tagalog', '218447'), +('804', 'Lapu-Lapu', 'PHL', 'Central Visayas', '217019'), +('805', 'San Pablo', 'PHL', 'Southern Tagalog', '207927'), +('806', 'Bińan', 'PHL', 'Southern Tagalog', '201186'), +('807', 'Taytay', 'PHL', 'Southern Tagalog', '198183'), +('808', 'Lucena', 'PHL', 'Southern Tagalog', '196075'), +('809', 'Imus', 'PHL', 'Southern Tagalog', '195482'), +('810', 'Olongapo', 'PHL', 'Central Luzon', '194260'), +('811', 'Binangonan', 'PHL', 'Southern Tagalog', '187691'), +('812', 'Santa Rosa', 'PHL', 'Southern Tagalog', '185633'), +('813', 'Tagum', 'PHL', 'Southern Mindanao', '179531'), +('814', 'Tacloban', 'PHL', 'Eastern Visayas', '178639'), +('815', 'Malolos', 'PHL', 'Central Luzon', '175291'), +('816', 'Mabalacat', 'PHL', 'Central Luzon', '171045'), +('817', 'Cotabato', 'PHL', 'Central Mindanao', '163849'), +('818', 'Meycauayan', 'PHL', 'Central Luzon', '163037'), +('819', 'Puerto Princesa', 'PHL', 'Southern Tagalog', '161912'), +('820', 'Legazpi', 'PHL', 'Bicol', '157010'), +('821', 'Silang', 'PHL', 'Southern Tagalog', '156137'), +('822', 'Ormoc', 'PHL', 'Eastern Visayas', '154297'), +('823', 'San Carlos', 'PHL', 'Ilocos', '154264'), +('824', 'Kabankalan', 'PHL', 'Western Visayas', '149769'), +('825', 'Talisay', 'PHL', 'Central Visayas', '148110'), +('826', 'Valencia', 'PHL', 'Northern Mindanao', '147924'), +('827', 'Calbayog', 'PHL', 'Eastern Visayas', '147187'), +('828', 'Santa Maria', 'PHL', 'Central Luzon', '144282'), +('829', 'Pagadian', 'PHL', 'Western Mindanao', '142515'), +('830', 'Cadiz', 'PHL', 'Western Visayas', '141954'), +('831', 'Bago', 'PHL', 'Western Visayas', '141721'), +('832', 'Toledo', 'PHL', 'Central Visayas', '141174'), +('833', 'Naga', 'PHL', 'Bicol', '137810'), +('834', 'San Mateo', 'PHL', 'Southern Tagalog', '135603'), +('835', 'Panabo', 'PHL', 'Southern Mindanao', '133950'), +('836', 'Koronadal', 'PHL', 'Southern Mindanao', '133786'), +('837', 'Marawi', 'PHL', 'Central Mindanao', '131090'), +('838', 'Dagupan', 'PHL', 'Ilocos', '130328'), +('839', 'Sagay', 'PHL', 'Western Visayas', '129765'), +('840', 'Roxas', 'PHL', 'Western Visayas', '126352'), +('841', 'Lubao', 'PHL', 'Central Luzon', '125699'), +('842', 'Digos', 'PHL', 'Southern Mindanao', '125171'), +('843', 'San Miguel', 'PHL', 'Central Luzon', '123824'), +('844', 'Malaybalay', 'PHL', 'Northern Mindanao', '123672'), +('845', 'Tuguegarao', 'PHL', 'Cagayan Valley', '120645'), +('846', 'Ilagan', 'PHL', 'Cagayan Valley', '119990'), +('847', 'Baliuag', 'PHL', 'Central Luzon', '119675'), +('848', 'Surigao', 'PHL', 'Caraga', '118534'), +('849', 'San Carlos', 'PHL', 'Western Visayas', '118259'), +('850', 'San Juan del Monte', 'PHL', 'National Capital Reg', '117680'), +('851', 'Tanauan', 'PHL', 'Southern Tagalog', '117539'), +('852', 'Concepcion', 'PHL', 'Central Luzon', '115171'), +('853', 'Rodriguez (Montalban)', 'PHL', 'Southern Tagalog', '115167'), +('854', 'Sariaya', 'PHL', 'Southern Tagalog', '114568'), +('855', 'Malasiqui', 'PHL', 'Ilocos', '113190'), +('856', 'General Mariano Alvarez', 'PHL', 'Southern Tagalog', '112446'), +('857', 'Urdaneta', 'PHL', 'Ilocos', '111582'), +('858', 'Hagonoy', 'PHL', 'Central Luzon', '111425'), +('859', 'San Jose', 'PHL', 'Southern Tagalog', '111009'), +('860', 'Polomolok', 'PHL', 'Southern Mindanao', '110709'), +('861', 'Santiago', 'PHL', 'Cagayan Valley', '110531'), +('862', 'Tanza', 'PHL', 'Southern Tagalog', '110517'), +('863', 'Ozamis', 'PHL', 'Northern Mindanao', '110420'), +('864', 'Mexico', 'PHL', 'Central Luzon', '109481'), +('865', 'San Jose', 'PHL', 'Central Luzon', '108254'), +('866', 'Silay', 'PHL', 'Western Visayas', '107722'), +('867', 'General Trias', 'PHL', 'Southern Tagalog', '107691'), +('868', 'Tabaco', 'PHL', 'Bicol', '107166'), +('869', 'Cabuyao', 'PHL', 'Southern Tagalog', '106630'), +('870', 'Calapan', 'PHL', 'Southern Tagalog', '105910'), +('871', 'Mati', 'PHL', 'Southern Mindanao', '105908'), +('872', 'Midsayap', 'PHL', 'Central Mindanao', '105760'), +('873', 'Cauayan', 'PHL', 'Cagayan Valley', '103952'), +('874', 'Gingoog', 'PHL', 'Northern Mindanao', '102379'), +('875', 'Dumaguete', 'PHL', 'Central Visayas', '102265'), +('876', 'San Fernando', 'PHL', 'Ilocos', '102082'), +('877', 'Arayat', 'PHL', 'Central Luzon', '101792'), +('878', 'Bayawan (Tulong)', 'PHL', 'Central Visayas', '101391'), +('879', 'Kidapawan', 'PHL', 'Central Mindanao', '101205'), +('880', 'Daraga (Locsin)', 'PHL', 'Bicol', '101031'), +('881', 'Marilao', 'PHL', 'Central Luzon', '101017'), +('882', 'Malita', 'PHL', 'Southern Mindanao', '100000'), +('883', 'Dipolog', 'PHL', 'Western Mindanao', '99862'), +('884', 'Cavite', 'PHL', 'Southern Tagalog', '99367'), +('885', 'Danao', 'PHL', 'Central Visayas', '98781'), +('886', 'Bislig', 'PHL', 'Caraga', '97860'), +('887', 'Talavera', 'PHL', 'Central Luzon', '97329'), +('888', 'Guagua', 'PHL', 'Central Luzon', '96858'), +('889', 'Bayambang', 'PHL', 'Ilocos', '96609'), +('890', 'Nasugbu', 'PHL', 'Southern Tagalog', '96113'), +('891', 'Baybay', 'PHL', 'Eastern Visayas', '95630'), +('892', 'Capas', 'PHL', 'Central Luzon', '95219'), +('893', 'Sultan Kudarat', 'PHL', 'ARMM', '94861'), +('894', 'Laoag', 'PHL', 'Ilocos', '94466'), +('895', 'Bayugan', 'PHL', 'Caraga', '93623'), +('896', 'Malungon', 'PHL', 'Southern Mindanao', '93232'), +('897', 'Santa Cruz', 'PHL', 'Southern Tagalog', '92694'), +('898', 'Sorsogon', 'PHL', 'Bicol', '92512'), +('899', 'Candelaria', 'PHL', 'Southern Tagalog', '92429'), +('900', 'Ligao', 'PHL', 'Bicol', '90603'), +('901', 'Tórshavn', 'FRO', 'Streymoyar', '14542'), +('902', 'Libreville', 'GAB', 'Estuaire', '419000'), +('903', 'Serekunda', 'GMB', 'Kombo St Mary', '102600'), +('904', 'Banjul', 'GMB', 'Banjul', '42326'), +('905', 'Tbilisi', 'GEO', 'Tbilisi', '1235200'), +('906', 'Kutaisi', 'GEO', 'Imereti', '240900'), +('907', 'Rustavi', 'GEO', 'Kvemo Kartli', '155400'), +('908', 'Batumi', 'GEO', 'Adzaria [Atšara]', '137700'), +('909', 'Sohumi', 'GEO', 'Abhasia [Aphazeti]', '111700'), +('910', 'Accra', 'GHA', 'Greater Accra', '1070000'), +('911', 'Kumasi', 'GHA', 'Ashanti', '385192'), +('912', 'Tamale', 'GHA', 'Northern', '151069'), +('913', 'Tema', 'GHA', 'Greater Accra', '109975'), +('914', 'Sekondi-Takoradi', 'GHA', 'Western', '103653'), +('915', 'Gibraltar', 'GIB', '–', '27025'), +('916', 'Saint George´s', 'GRD', 'St George', '4621'), +('917', 'Nuuk', 'GRL', 'Kitaa', '13445'), +('918', 'Les Abymes', 'GLP', 'Grande-Terre', '62947'), +('919', 'Basse-Terre', 'GLP', 'Basse-Terre', '12433'), +('920', 'Tamuning', 'GUM', '–', '9500'), +('921', 'Agańa', 'GUM', '–', '1139'), +('922', 'Ciudad de Guatemala', 'GTM', 'Guatemala', '823301'), +('923', 'Mixco', 'GTM', 'Guatemala', '209791'), +('924', 'Villa Nueva', 'GTM', 'Guatemala', '101295'), +('925', 'Quetzaltenango', 'GTM', 'Quetzaltenango', '90801'), +('926', 'Conakry', 'GIN', 'Conakry', '1090610'), +('927', 'Bissau', 'GNB', 'Bissau', '241000'), +('928', 'Georgetown', 'GUY', 'Georgetown', '254000'), +('929', 'Port-au-Prince', 'HTI', 'Ouest', '884472'), +('930', 'Carrefour', 'HTI', 'Ouest', '290204'), +('931', 'Delmas', 'HTI', 'Ouest', '240429'), +('932', 'Le-Cap-Haďtien', 'HTI', 'Nord', '102233'), +('933', 'Tegucigalpa', 'HND', 'Distrito Central', '813900'), +('934', 'San Pedro Sula', 'HND', 'Cortés', '383900'), +('935', 'La Ceiba', 'HND', 'Atlántida', '89200'), +('936', 'Kowloon and New Kowloon', 'HKG', 'Kowloon and New Kowl', '1987996'), +('937', 'Victoria', 'HKG', 'Hongkong', '1312637'), +('938', 'Longyearbyen', 'SJM', 'Länsimaa', '1438'), +('939', 'Jakarta', 'IDN', 'Jakarta Raya', '9604900'), +('940', 'Surabaya', 'IDN', 'East Java', '2663820'), +('941', 'Bandung', 'IDN', 'West Java', '2429000'), +('942', 'Medan', 'IDN', 'Sumatera Utara', '1843919'), +('943', 'Palembang', 'IDN', 'Sumatera Selatan', '1222764'), +('944', 'Tangerang', 'IDN', 'West Java', '1198300'), +('945', 'Semarang', 'IDN', 'Central Java', '1104405'), +('946', 'Ujung Pandang', 'IDN', 'Sulawesi Selatan', '1060257'), +('947', 'Malang', 'IDN', 'East Java', '716862'), +('948', 'Bandar Lampung', 'IDN', 'Lampung', '680332'), +('949', 'Bekasi', 'IDN', 'West Java', '644300'), +('950', 'Padang', 'IDN', 'Sumatera Barat', '534474'), +('951', 'Surakarta', 'IDN', 'Central Java', '518600'), +('952', 'Banjarmasin', 'IDN', 'Kalimantan Selatan', '482931'), +('953', 'Pekan Baru', 'IDN', 'Riau', '438638'), +('954', 'Denpasar', 'IDN', 'Bali', '435000'), +('955', 'Yogyakarta', 'IDN', 'Yogyakarta', '418944'), +('956', 'Pontianak', 'IDN', 'Kalimantan Barat', '409632'), +('957', 'Samarinda', 'IDN', 'Kalimantan Timur', '399175'), +('958', 'Jambi', 'IDN', 'Jambi', '385201'), +('959', 'Depok', 'IDN', 'West Java', '365200'), +('960', 'Cimahi', 'IDN', 'West Java', '344600'), +('961', 'Balikpapan', 'IDN', 'Kalimantan Timur', '338752'), +('962', 'Manado', 'IDN', 'Sulawesi Utara', '332288'), +('963', 'Mataram', 'IDN', 'Nusa Tenggara Barat', '306600'), +('964', 'Pekalongan', 'IDN', 'Central Java', '301504'), +('965', 'Tegal', 'IDN', 'Central Java', '289744'), +('966', 'Bogor', 'IDN', 'West Java', '285114'), +('967', 'Ciputat', 'IDN', 'West Java', '270800'), +('968', 'Pondokgede', 'IDN', 'West Java', '263200'), +('969', 'Cirebon', 'IDN', 'West Java', '254406'), +('970', 'Kediri', 'IDN', 'East Java', '253760'), +('971', 'Ambon', 'IDN', 'Molukit', '249312'), +('972', 'Jember', 'IDN', 'East Java', '218500'), +('973', 'Cilacap', 'IDN', 'Central Java', '206900'), +('974', 'Cimanggis', 'IDN', 'West Java', '205100'), +('975', 'Pematang Siantar', 'IDN', 'Sumatera Utara', '203056'), +('976', 'Purwokerto', 'IDN', 'Central Java', '202500'), +('977', 'Ciomas', 'IDN', 'West Java', '187400'), +('978', 'Tasikmalaya', 'IDN', 'West Java', '179800'), +('979', 'Madiun', 'IDN', 'East Java', '171532'), +('980', 'Bengkulu', 'IDN', 'Bengkulu', '146439'), +('981', 'Karawang', 'IDN', 'West Java', '145000'), +('982', 'Banda Aceh', 'IDN', 'Aceh', '143409'), +('983', 'Palu', 'IDN', 'Sulawesi Tengah', '142800'), +('984', 'Pasuruan', 'IDN', 'East Java', '134019'), +('985', 'Kupang', 'IDN', 'Nusa Tenggara Timur', '129300'), +('986', 'Tebing Tinggi', 'IDN', 'Sumatera Utara', '129300'), +('987', 'Percut Sei Tuan', 'IDN', 'Sumatera Utara', '129000'), +('988', 'Binjai', 'IDN', 'Sumatera Utara', '127222'), +('989', 'Sukabumi', 'IDN', 'West Java', '125766'), +('990', 'Waru', 'IDN', 'East Java', '124300'), +('991', 'Pangkal Pinang', 'IDN', 'Sumatera Selatan', '124000'), +('992', 'Magelang', 'IDN', 'Central Java', '123800'), +('993', 'Blitar', 'IDN', 'East Java', '122600'), +('994', 'Serang', 'IDN', 'West Java', '122400'), +('995', 'Probolinggo', 'IDN', 'East Java', '120770'), +('996', 'Cilegon', 'IDN', 'West Java', '117000'), +('997', 'Cianjur', 'IDN', 'West Java', '114300'), +('998', 'Ciparay', 'IDN', 'West Java', '111500'), +('999', 'Lhokseumawe', 'IDN', 'Aceh', '109600'), +('1000', 'Taman', 'IDN', 'East Java', '107000'), +('1001', 'Depok', 'IDN', 'Yogyakarta', '106800'), +('1002', 'Citeureup', 'IDN', 'West Java', '105100'), +('1003', 'Pemalang', 'IDN', 'Central Java', '103500'), +('1004', 'Klaten', 'IDN', 'Central Java', '103300'), +('1005', 'Salatiga', 'IDN', 'Central Java', '103000'), +('1006', 'Cibinong', 'IDN', 'West Java', '101300'), +('1007', 'Palangka Raya', 'IDN', 'Kalimantan Tengah', '99693'), +('1008', 'Mojokerto', 'IDN', 'East Java', '96626'), +('1009', 'Purwakarta', 'IDN', 'West Java', '95900'), +('1010', 'Garut', 'IDN', 'West Java', '95800'), +('1011', 'Kudus', 'IDN', 'Central Java', '95300'), +('1012', 'Kendari', 'IDN', 'Sulawesi Tenggara', '94800'), +('1013', 'Jaya Pura', 'IDN', 'West Irian', '94700'), +('1014', 'Gorontalo', 'IDN', 'Sulawesi Utara', '94058'), +('1015', 'Majalaya', 'IDN', 'West Java', '93200'), +('1016', 'Pondok Aren', 'IDN', 'West Java', '92700'), +('1017', 'Jombang', 'IDN', 'East Java', '92600'), +('1018', 'Sunggal', 'IDN', 'Sumatera Utara', '92300'), +('1019', 'Batam', 'IDN', 'Riau', '91871'), +('1020', 'Padang Sidempuan', 'IDN', 'Sumatera Utara', '91200'), +('1021', 'Sawangan', 'IDN', 'West Java', '91100'), +('1022', 'Banyuwangi', 'IDN', 'East Java', '89900'), +('1023', 'Tanjung Pinang', 'IDN', 'Riau', '89900'), +('1024', 'Mumbai (Bombay)', 'IND', 'Maharashtra', '10500000'), +('1025', 'Delhi', 'IND', 'Delhi', '7206704'), +('1026', 'Calcutta [Kolkata]', 'IND', 'West Bengali', '4399819'), +('1027', 'Chennai (Madras)', 'IND', 'Tamil Nadu', '3841396'), +('1028', 'Hyderabad', 'IND', 'Andhra Pradesh', '2964638'), +('1029', 'Ahmedabad', 'IND', 'Gujarat', '2876710'), +('1030', 'Bangalore', 'IND', 'Karnataka', '2660088'), +('1031', 'Kanpur', 'IND', 'Uttar Pradesh', '1874409'), +('1032', 'Nagpur', 'IND', 'Maharashtra', '1624752'), +('1033', 'Lucknow', 'IND', 'Uttar Pradesh', '1619115'), +('1034', 'Pune', 'IND', 'Maharashtra', '1566651'), +('1035', 'Surat', 'IND', 'Gujarat', '1498817'), +('1036', 'Jaipur', 'IND', 'Rajasthan', '1458483'), +('1037', 'Indore', 'IND', 'Madhya Pradesh', '1091674'), +('1038', 'Bhopal', 'IND', 'Madhya Pradesh', '1062771'), +('1039', 'Ludhiana', 'IND', 'Punjab', '1042740'), +('1040', 'Vadodara (Baroda)', 'IND', 'Gujarat', '1031346'), +('1041', 'Kalyan', 'IND', 'Maharashtra', '1014557'), +('1042', 'Madurai', 'IND', 'Tamil Nadu', '977856'), +('1043', 'Haora (Howrah)', 'IND', 'West Bengali', '950435'), +('1044', 'Varanasi (Benares)', 'IND', 'Uttar Pradesh', '929270'), +('1045', 'Patna', 'IND', 'Bihar', '917243'), +('1046', 'Srinagar', 'IND', 'Jammu and Kashmir', '892506'), +('1047', 'Agra', 'IND', 'Uttar Pradesh', '891790'), +('1048', 'Coimbatore', 'IND', 'Tamil Nadu', '816321'), +('1049', 'Thane (Thana)', 'IND', 'Maharashtra', '803389'), +('1050', 'Allahabad', 'IND', 'Uttar Pradesh', '792858'), +('1051', 'Meerut', 'IND', 'Uttar Pradesh', '753778'), +('1052', 'Vishakhapatnam', 'IND', 'Andhra Pradesh', '752037'), +('1053', 'Jabalpur', 'IND', 'Madhya Pradesh', '741927'), +('1054', 'Amritsar', 'IND', 'Punjab', '708835'), +('1055', 'Faridabad', 'IND', 'Haryana', '703592'), +('1056', 'Vijayawada', 'IND', 'Andhra Pradesh', '701827'), +('1057', 'Gwalior', 'IND', 'Madhya Pradesh', '690765'), +('1058', 'Jodhpur', 'IND', 'Rajasthan', '666279'), +('1059', 'Nashik (Nasik)', 'IND', 'Maharashtra', '656925'), +('1060', 'Hubli-Dharwad', 'IND', 'Karnataka', '648298'), +('1061', 'Solapur (Sholapur)', 'IND', 'Maharashtra', '604215'), +('1062', 'Ranchi', 'IND', 'Jharkhand', '599306'), +('1063', 'Bareilly', 'IND', 'Uttar Pradesh', '587211'), +('1064', 'Guwahati (Gauhati)', 'IND', 'Assam', '584342'), +('1065', 'Shambajinagar (Aurangabad)', 'IND', 'Maharashtra', '573272'), +('1066', 'Cochin (Kochi)', 'IND', 'Kerala', '564589'), +('1067', 'Rajkot', 'IND', 'Gujarat', '559407'), +('1068', 'Kota', 'IND', 'Rajasthan', '537371'), +('1069', 'Thiruvananthapuram (Trivandrum', 'IND', 'Kerala', '524006'), +('1070', 'Pimpri-Chinchwad', 'IND', 'Maharashtra', '517083'), +('1071', 'Jalandhar (Jullundur)', 'IND', 'Punjab', '509510'), +('1072', 'Gorakhpur', 'IND', 'Uttar Pradesh', '505566'), +('1073', 'Chandigarh', 'IND', 'Chandigarh', '504094'), +('1074', 'Mysore', 'IND', 'Karnataka', '480692'), +('1075', 'Aligarh', 'IND', 'Uttar Pradesh', '480520'), +('1076', 'Guntur', 'IND', 'Andhra Pradesh', '471051'), +('1077', 'Jamshedpur', 'IND', 'Jharkhand', '460577'), +('1078', 'Ghaziabad', 'IND', 'Uttar Pradesh', '454156'), +('1079', 'Warangal', 'IND', 'Andhra Pradesh', '447657'), +('1080', 'Raipur', 'IND', 'Chhatisgarh', '438639'), +('1081', 'Moradabad', 'IND', 'Uttar Pradesh', '429214'), +('1082', 'Durgapur', 'IND', 'West Bengali', '425836'), +('1083', 'Amravati', 'IND', 'Maharashtra', '421576'), +('1084', 'Calicut (Kozhikode)', 'IND', 'Kerala', '419831'), +('1085', 'Bikaner', 'IND', 'Rajasthan', '416289'), +('1086', 'Bhubaneswar', 'IND', 'Orissa', '411542'), +('1087', 'Kolhapur', 'IND', 'Maharashtra', '406370'), +('1088', 'Kataka (Cuttack)', 'IND', 'Orissa', '403418'), +('1089', 'Ajmer', 'IND', 'Rajasthan', '402700'), +('1090', 'Bhavnagar', 'IND', 'Gujarat', '402338'), +('1091', 'Tiruchirapalli', 'IND', 'Tamil Nadu', '387223'), +('1092', 'Bhilai', 'IND', 'Chhatisgarh', '386159'), +('1093', 'Bhiwandi', 'IND', 'Maharashtra', '379070'), +('1094', 'Saharanpur', 'IND', 'Uttar Pradesh', '374945'), +('1095', 'Ulhasnagar', 'IND', 'Maharashtra', '369077'), +('1096', 'Salem', 'IND', 'Tamil Nadu', '366712'), +('1097', 'Ujjain', 'IND', 'Madhya Pradesh', '362266'), +('1098', 'Malegaon', 'IND', 'Maharashtra', '342595'), +('1099', 'Jamnagar', 'IND', 'Gujarat', '341637'), +('1100', 'Bokaro Steel City', 'IND', 'Jharkhand', '333683'), +('1101', 'Akola', 'IND', 'Maharashtra', '328034'), +('1102', 'Belgaum', 'IND', 'Karnataka', '326399'), +('1103', 'Rajahmundry', 'IND', 'Andhra Pradesh', '324851'), +('1104', 'Nellore', 'IND', 'Andhra Pradesh', '316606'), +('1105', 'Udaipur', 'IND', 'Rajasthan', '308571'), +('1106', 'New Bombay', 'IND', 'Maharashtra', '307297'), +('1107', 'Bhatpara', 'IND', 'West Bengali', '304952'), +('1108', 'Gulbarga', 'IND', 'Karnataka', '304099'), +('1109', 'New Delhi', 'IND', 'Delhi', '301297'), +('1110', 'Jhansi', 'IND', 'Uttar Pradesh', '300850'), +('1111', 'Gaya', 'IND', 'Bihar', '291675'), +('1112', 'Kakinada', 'IND', 'Andhra Pradesh', '279980'), +('1113', 'Dhule (Dhulia)', 'IND', 'Maharashtra', '278317'), +('1114', 'Panihati', 'IND', 'West Bengali', '275990'), +('1115', 'Nanded (Nander)', 'IND', 'Maharashtra', '275083'), +('1116', 'Mangalore', 'IND', 'Karnataka', '273304'), +('1117', 'Dehra Dun', 'IND', 'Uttaranchal', '270159'), +('1118', 'Kamarhati', 'IND', 'West Bengali', '266889'), +('1119', 'Davangere', 'IND', 'Karnataka', '266082'), +('1120', 'Asansol', 'IND', 'West Bengali', '262188'), +('1121', 'Bhagalpur', 'IND', 'Bihar', '253225'), +('1122', 'Bellary', 'IND', 'Karnataka', '245391'), +('1123', 'Barddhaman (Burdwan)', 'IND', 'West Bengali', '245079'), +('1124', 'Rampur', 'IND', 'Uttar Pradesh', '243742'), +('1125', 'Jalgaon', 'IND', 'Maharashtra', '242193'), +('1126', 'Muzaffarpur', 'IND', 'Bihar', '241107'), +('1127', 'Nizamabad', 'IND', 'Andhra Pradesh', '241034'), +('1128', 'Muzaffarnagar', 'IND', 'Uttar Pradesh', '240609'), +('1129', 'Patiala', 'IND', 'Punjab', '238368'), +('1130', 'Shahjahanpur', 'IND', 'Uttar Pradesh', '237713'), +('1131', 'Kurnool', 'IND', 'Andhra Pradesh', '236800'), +('1132', 'Tiruppur (Tirupper)', 'IND', 'Tamil Nadu', '235661'), +('1133', 'Rohtak', 'IND', 'Haryana', '233400'), +('1134', 'South Dum Dum', 'IND', 'West Bengali', '232811'), +('1135', 'Mathura', 'IND', 'Uttar Pradesh', '226691'), +('1136', 'Chandrapur', 'IND', 'Maharashtra', '226105'), +('1137', 'Barahanagar (Baranagar)', 'IND', 'West Bengali', '224821'), +('1138', 'Darbhanga', 'IND', 'Bihar', '218391'), +('1139', 'Siliguri (Shiliguri)', 'IND', 'West Bengali', '216950'), +('1140', 'Raurkela', 'IND', 'Orissa', '215489'), +('1141', 'Ambattur', 'IND', 'Tamil Nadu', '215424'), +('1142', 'Panipat', 'IND', 'Haryana', '215218'), +('1143', 'Firozabad', 'IND', 'Uttar Pradesh', '215128'), +('1144', 'Ichalkaranji', 'IND', 'Maharashtra', '214950'), +('1145', 'Jammu', 'IND', 'Jammu and Kashmir', '214737'), +('1146', 'Ramagundam', 'IND', 'Andhra Pradesh', '214384'), +('1147', 'Eluru', 'IND', 'Andhra Pradesh', '212866'), +('1148', 'Brahmapur', 'IND', 'Orissa', '210418'), +('1149', 'Alwar', 'IND', 'Rajasthan', '205086'), +('1150', 'Pondicherry', 'IND', 'Pondicherry', '203065'), +('1151', 'Thanjavur', 'IND', 'Tamil Nadu', '202013'), +('1152', 'Bihar Sharif', 'IND', 'Bihar', '201323'), +('1153', 'Tuticorin', 'IND', 'Tamil Nadu', '199854'), +('1154', 'Imphal', 'IND', 'Manipur', '198535'), +('1155', 'Latur', 'IND', 'Maharashtra', '197408'), +('1156', 'Sagar', 'IND', 'Madhya Pradesh', '195346'), +('1157', 'Farrukhabad-cum-Fatehgarh', 'IND', 'Uttar Pradesh', '194567'), +('1158', 'Sangli', 'IND', 'Maharashtra', '193197'), +('1159', 'Parbhani', 'IND', 'Maharashtra', '190255'), +('1160', 'Nagar Coil', 'IND', 'Tamil Nadu', '190084'), +('1161', 'Bijapur', 'IND', 'Karnataka', '186939'), +('1162', 'Kukatpalle', 'IND', 'Andhra Pradesh', '185378'), +('1163', 'Bally', 'IND', 'West Bengali', '184474'), +('1164', 'Bhilwara', 'IND', 'Rajasthan', '183965'), +('1165', 'Ratlam', 'IND', 'Madhya Pradesh', '183375'), +('1166', 'Avadi', 'IND', 'Tamil Nadu', '183215'), +('1167', 'Dindigul', 'IND', 'Tamil Nadu', '182477'), +('1168', 'Ahmadnagar', 'IND', 'Maharashtra', '181339'), +('1169', 'Bilaspur', 'IND', 'Chhatisgarh', '179833'), +('1170', 'Shimoga', 'IND', 'Karnataka', '179258'), +('1171', 'Kharagpur', 'IND', 'West Bengali', '177989'), +('1172', 'Mira Bhayandar', 'IND', 'Maharashtra', '175372'), +('1173', 'Vellore', 'IND', 'Tamil Nadu', '175061'), +('1174', 'Jalna', 'IND', 'Maharashtra', '174985'), +('1175', 'Burnpur', 'IND', 'West Bengali', '174933'), +('1176', 'Anantapur', 'IND', 'Andhra Pradesh', '174924'), +('1177', 'Allappuzha (Alleppey)', 'IND', 'Kerala', '174666'), +('1178', 'Tirupati', 'IND', 'Andhra Pradesh', '174369'), +('1179', 'Karnal', 'IND', 'Haryana', '173751'), +('1180', 'Burhanpur', 'IND', 'Madhya Pradesh', '172710'), +('1181', 'Hisar (Hissar)', 'IND', 'Haryana', '172677'), +('1182', 'Tiruvottiyur', 'IND', 'Tamil Nadu', '172562'), +('1183', 'Mirzapur-cum-Vindhyachal', 'IND', 'Uttar Pradesh', '169336'), +('1184', 'Secunderabad', 'IND', 'Andhra Pradesh', '167461'), +('1185', 'Nadiad', 'IND', 'Gujarat', '167051'), +('1186', 'Dewas', 'IND', 'Madhya Pradesh', '164364'), +('1187', 'Murwara (Katni)', 'IND', 'Madhya Pradesh', '163431'), +('1188', 'Ganganagar', 'IND', 'Rajasthan', '161482'), +('1189', 'Vizianagaram', 'IND', 'Andhra Pradesh', '160359'), +('1190', 'Erode', 'IND', 'Tamil Nadu', '159232'), +('1191', 'Machilipatnam (Masulipatam)', 'IND', 'Andhra Pradesh', '159110'), +('1192', 'Bhatinda (Bathinda)', 'IND', 'Punjab', '159042'), +('1193', 'Raichur', 'IND', 'Karnataka', '157551'), +('1194', 'Agartala', 'IND', 'Tripura', '157358'), +('1195', 'Arrah (Ara)', 'IND', 'Bihar', '157082'), +('1196', 'Satna', 'IND', 'Madhya Pradesh', '156630'), +('1197', 'Lalbahadur Nagar', 'IND', 'Andhra Pradesh', '155500'), +('1198', 'Aizawl', 'IND', 'Mizoram', '155240'), +('1199', 'Uluberia', 'IND', 'West Bengali', '155172'), +('1200', 'Katihar', 'IND', 'Bihar', '154367'), +('1201', 'Cuddalore', 'IND', 'Tamil Nadu', '153086'), +('1202', 'Hugli-Chinsurah', 'IND', 'West Bengali', '151806'), +('1203', 'Dhanbad', 'IND', 'Jharkhand', '151789'), +('1204', 'Raiganj', 'IND', 'West Bengali', '151045'), +('1205', 'Sambhal', 'IND', 'Uttar Pradesh', '150869'), +('1206', 'Durg', 'IND', 'Chhatisgarh', '150645'), +('1207', 'Munger (Monghyr)', 'IND', 'Bihar', '150112'), +('1208', 'Kanchipuram', 'IND', 'Tamil Nadu', '150100'), +('1209', 'North Dum Dum', 'IND', 'West Bengali', '149965'), +('1210', 'Karimnagar', 'IND', 'Andhra Pradesh', '148583'), +('1211', 'Bharatpur', 'IND', 'Rajasthan', '148519'), +('1212', 'Sikar', 'IND', 'Rajasthan', '148272'), +('1213', 'Hardwar (Haridwar)', 'IND', 'Uttaranchal', '147305'), +('1214', 'Dabgram', 'IND', 'West Bengali', '147217'), +('1215', 'Morena', 'IND', 'Madhya Pradesh', '147124'), +('1216', 'Noida', 'IND', 'Uttar Pradesh', '146514'), +('1217', 'Hapur', 'IND', 'Uttar Pradesh', '146262'), +('1218', 'Bhusawal', 'IND', 'Maharashtra', '145143'), +('1219', 'Khandwa', 'IND', 'Madhya Pradesh', '145133'), +('1220', 'Yamuna Nagar', 'IND', 'Haryana', '144346'), +('1221', 'Sonipat (Sonepat)', 'IND', 'Haryana', '143922'), +('1222', 'Tenali', 'IND', 'Andhra Pradesh', '143726'), +('1223', 'Raurkela Civil Township', 'IND', 'Orissa', '140408'), +('1224', 'Kollam (Quilon)', 'IND', 'Kerala', '139852'), +('1225', 'Kumbakonam', 'IND', 'Tamil Nadu', '139483'), +('1226', 'Ingraj Bazar (English Bazar)', 'IND', 'West Bengali', '139204'), +('1227', 'Timkur', 'IND', 'Karnataka', '138903'), +('1228', 'Amroha', 'IND', 'Uttar Pradesh', '137061'), +('1229', 'Serampore', 'IND', 'West Bengali', '137028'), +('1230', 'Chapra', 'IND', 'Bihar', '136877'), +('1231', 'Pali', 'IND', 'Rajasthan', '136842'), +('1232', 'Maunath Bhanjan', 'IND', 'Uttar Pradesh', '136697'), +('1233', 'Adoni', 'IND', 'Andhra Pradesh', '136182'), +('1234', 'Jaunpur', 'IND', 'Uttar Pradesh', '136062'), +('1235', 'Tirunelveli', 'IND', 'Tamil Nadu', '135825'), +('1236', 'Bahraich', 'IND', 'Uttar Pradesh', '135400'), +('1237', 'Gadag Betigeri', 'IND', 'Karnataka', '134051'), +('1238', 'Proddatur', 'IND', 'Andhra Pradesh', '133914'), +('1239', 'Chittoor', 'IND', 'Andhra Pradesh', '133462'), +('1240', 'Barrackpur', 'IND', 'West Bengali', '133265'), +('1241', 'Bharuch (Broach)', 'IND', 'Gujarat', '133102'), +('1242', 'Naihati', 'IND', 'West Bengali', '132701'), +('1243', 'Shillong', 'IND', 'Meghalaya', '131719'), +('1244', 'Sambalpur', 'IND', 'Orissa', '131138'), +('1245', 'Junagadh', 'IND', 'Gujarat', '130484'), +('1246', 'Rae Bareli', 'IND', 'Uttar Pradesh', '129904'), +('1247', 'Rewa', 'IND', 'Madhya Pradesh', '128981'), +('1248', 'Gurgaon', 'IND', 'Haryana', '128608'), +('1249', 'Khammam', 'IND', 'Andhra Pradesh', '127992'), +('1250', 'Bulandshahr', 'IND', 'Uttar Pradesh', '127201'), +('1251', 'Navsari', 'IND', 'Gujarat', '126089'), +('1252', 'Malkajgiri', 'IND', 'Andhra Pradesh', '126066'), +('1253', 'Midnapore (Medinipur)', 'IND', 'West Bengali', '125498'), +('1254', 'Miraj', 'IND', 'Maharashtra', '125407'), +('1255', 'Raj Nandgaon', 'IND', 'Chhatisgarh', '125371'), +('1256', 'Alandur', 'IND', 'Tamil Nadu', '125244'), +('1257', 'Puri', 'IND', 'Orissa', '125199'), +('1258', 'Navadwip', 'IND', 'West Bengali', '125037'), +('1259', 'Sirsa', 'IND', 'Haryana', '125000'), +('1260', 'Korba', 'IND', 'Chhatisgarh', '124501'), +('1261', 'Faizabad', 'IND', 'Uttar Pradesh', '124437'), +('1262', 'Etawah', 'IND', 'Uttar Pradesh', '124072'), +('1263', 'Pathankot', 'IND', 'Punjab', '123930'), +('1264', 'Gandhinagar', 'IND', 'Gujarat', '123359'), +('1265', 'Palghat (Palakkad)', 'IND', 'Kerala', '123289'), +('1266', 'Veraval', 'IND', 'Gujarat', '123000'), +('1267', 'Hoshiarpur', 'IND', 'Punjab', '122705'), +('1268', 'Ambala', 'IND', 'Haryana', '122596'), +('1269', 'Sitapur', 'IND', 'Uttar Pradesh', '121842'), +('1270', 'Bhiwani', 'IND', 'Haryana', '121629'), +('1271', 'Cuddapah', 'IND', 'Andhra Pradesh', '121463'), +('1272', 'Bhimavaram', 'IND', 'Andhra Pradesh', '121314'), +('1273', 'Krishnanagar', 'IND', 'West Bengali', '121110'), +('1274', 'Chandannagar', 'IND', 'West Bengali', '120378'), +('1275', 'Mandya', 'IND', 'Karnataka', '120265'), +('1276', 'Dibrugarh', 'IND', 'Assam', '120127'), +('1277', 'Nandyal', 'IND', 'Andhra Pradesh', '119813'), +('1278', 'Balurghat', 'IND', 'West Bengali', '119796'), +('1279', 'Neyveli', 'IND', 'Tamil Nadu', '118080'), +('1280', 'Fatehpur', 'IND', 'Uttar Pradesh', '117675'), +('1281', 'Mahbubnagar', 'IND', 'Andhra Pradesh', '116833'), +('1282', 'Budaun', 'IND', 'Uttar Pradesh', '116695'), +('1283', 'Porbandar', 'IND', 'Gujarat', '116671'), +('1284', 'Silchar', 'IND', 'Assam', '115483'), +('1285', 'Berhampore (Baharampur)', 'IND', 'West Bengali', '115144'), +('1286', 'Purnea (Purnia)', 'IND', 'Jharkhand', '114912'), +('1287', 'Bankura', 'IND', 'West Bengali', '114876'), +('1288', 'Rajapalaiyam', 'IND', 'Tamil Nadu', '114202'), +('1289', 'Titagarh', 'IND', 'West Bengali', '114085'), +('1290', 'Halisahar', 'IND', 'West Bengali', '114028'), +('1291', 'Hathras', 'IND', 'Uttar Pradesh', '113285'), +('1292', 'Bhir (Bid)', 'IND', 'Maharashtra', '112434'), +('1293', 'Pallavaram', 'IND', 'Tamil Nadu', '111866'), +('1294', 'Anand', 'IND', 'Gujarat', '110266'), +('1295', 'Mango', 'IND', 'Jharkhand', '110024'), +('1296', 'Santipur', 'IND', 'West Bengali', '109956'), +('1297', 'Bhind', 'IND', 'Madhya Pradesh', '109755'), +('1298', 'Gondiya', 'IND', 'Maharashtra', '109470'), +('1299', 'Tiruvannamalai', 'IND', 'Tamil Nadu', '109196'), +('1300', 'Yeotmal (Yavatmal)', 'IND', 'Maharashtra', '108578'), +('1301', 'Kulti-Barakar', 'IND', 'West Bengali', '108518'), +('1302', 'Moga', 'IND', 'Punjab', '108304'), +('1303', 'Shivapuri', 'IND', 'Madhya Pradesh', '108277'), +('1304', 'Bidar', 'IND', 'Karnataka', '108016'), +('1305', 'Guntakal', 'IND', 'Andhra Pradesh', '107592'), +('1306', 'Unnao', 'IND', 'Uttar Pradesh', '107425'), +('1307', 'Barasat', 'IND', 'West Bengali', '107365'), +('1308', 'Tambaram', 'IND', 'Tamil Nadu', '107187'), +('1309', 'Abohar', 'IND', 'Punjab', '107163'), +('1310', 'Pilibhit', 'IND', 'Uttar Pradesh', '106605'), +('1311', 'Valparai', 'IND', 'Tamil Nadu', '106523'), +('1312', 'Gonda', 'IND', 'Uttar Pradesh', '106078'), +('1313', 'Surendranagar', 'IND', 'Gujarat', '105973'), +('1314', 'Qutubullapur', 'IND', 'Andhra Pradesh', '105380'), +('1315', 'Beawar', 'IND', 'Rajasthan', '105363'), +('1316', 'Hindupur', 'IND', 'Andhra Pradesh', '104651'), +('1317', 'Gandhidham', 'IND', 'Gujarat', '104585'), +('1318', 'Haldwani-cum-Kathgodam', 'IND', 'Uttaranchal', '104195'), +('1319', 'Tellicherry (Thalassery)', 'IND', 'Kerala', '103579'), +('1320', 'Wardha', 'IND', 'Maharashtra', '102985'), +('1321', 'Rishra', 'IND', 'West Bengali', '102649'), +('1322', 'Bhuj', 'IND', 'Gujarat', '102176'), +('1323', 'Modinagar', 'IND', 'Uttar Pradesh', '101660'), +('1324', 'Gudivada', 'IND', 'Andhra Pradesh', '101656'), +('1325', 'Basirhat', 'IND', 'West Bengali', '101409'), +('1326', 'Uttarpara-Kotrung', 'IND', 'West Bengali', '100867'), +('1327', 'Ongole', 'IND', 'Andhra Pradesh', '100836'), +('1328', 'North Barrackpur', 'IND', 'West Bengali', '100513'), +('1329', 'Guna', 'IND', 'Madhya Pradesh', '100490'), +('1330', 'Haldia', 'IND', 'West Bengali', '100347'), +('1331', 'Habra', 'IND', 'West Bengali', '100223'), +('1332', 'Kanchrapara', 'IND', 'West Bengali', '100194'), +('1333', 'Tonk', 'IND', 'Rajasthan', '100079'), +('1334', 'Champdani', 'IND', 'West Bengali', '98818'), +('1335', 'Orai', 'IND', 'Uttar Pradesh', '98640'), +('1336', 'Pudukkottai', 'IND', 'Tamil Nadu', '98619'), +('1337', 'Sasaram', 'IND', 'Bihar', '98220'), +('1338', 'Hazaribag', 'IND', 'Jharkhand', '97712'), +('1339', 'Palayankottai', 'IND', 'Tamil Nadu', '97662'), +('1340', 'Banda', 'IND', 'Uttar Pradesh', '97227'), +('1341', 'Godhra', 'IND', 'Gujarat', '96813'), +('1342', 'Hospet', 'IND', 'Karnataka', '96322'), +('1343', 'Ashoknagar-Kalyangarh', 'IND', 'West Bengali', '96315'), +('1344', 'Achalpur', 'IND', 'Maharashtra', '96216'), +('1345', 'Patan', 'IND', 'Gujarat', '96109'), +('1346', 'Mandasor', 'IND', 'Madhya Pradesh', '95758'), +('1347', 'Damoh', 'IND', 'Madhya Pradesh', '95661'), +('1348', 'Satara', 'IND', 'Maharashtra', '95133'), +('1349', 'Meerut Cantonment', 'IND', 'Uttar Pradesh', '94876'), +('1350', 'Dehri', 'IND', 'Bihar', '94526'), +('1351', 'Delhi Cantonment', 'IND', 'Delhi', '94326'), +('1352', 'Chhindwara', 'IND', 'Madhya Pradesh', '93731'), +('1353', 'Bansberia', 'IND', 'West Bengali', '93447'), +('1354', 'Nagaon', 'IND', 'Assam', '93350'), +('1355', 'Kanpur Cantonment', 'IND', 'Uttar Pradesh', '93109'), +('1356', 'Vidisha', 'IND', 'Madhya Pradesh', '92917'), +('1357', 'Bettiah', 'IND', 'Bihar', '92583'), +('1358', 'Purulia', 'IND', 'Jharkhand', '92574'), +('1359', 'Hassan', 'IND', 'Karnataka', '90803'), +('1360', 'Ambala Sadar', 'IND', 'Haryana', '90712'), +('1361', 'Baidyabati', 'IND', 'West Bengali', '90601'), +('1362', 'Morvi', 'IND', 'Gujarat', '90357'), +('1363', 'Raigarh', 'IND', 'Chhatisgarh', '89166'), +('1364', 'Vejalpur', 'IND', 'Gujarat', '89053'), +('1365', 'Baghdad', 'IRQ', 'Baghdad', '4336000'), +('1366', 'Mosul', 'IRQ', 'Ninawa', '879000'), +('1367', 'Irbil', 'IRQ', 'Irbil', '485968'), +('1368', 'Kirkuk', 'IRQ', 'al-Tamim', '418624'), +('1369', 'Basra', 'IRQ', 'Basra', '406296'), +('1370', 'al-Sulaymaniya', 'IRQ', 'al-Sulaymaniya', '364096'), +('1371', 'al-Najaf', 'IRQ', 'al-Najaf', '309010'), +('1372', 'Karbala', 'IRQ', 'Karbala', '296705'), +('1373', 'al-Hilla', 'IRQ', 'Babil', '268834'), +('1374', 'al-Nasiriya', 'IRQ', 'DhiQar', '265937'), +('1375', 'al-Amara', 'IRQ', 'Maysan', '208797'), +('1376', 'al-Diwaniya', 'IRQ', 'al-Qadisiya', '196519'), +('1377', 'al-Ramadi', 'IRQ', 'al-Anbar', '192556'), +('1378', 'al-Kut', 'IRQ', 'Wasit', '183183'), +('1379', 'Baquba', 'IRQ', 'Diyala', '114516'), +('1380', 'Teheran', 'IRN', 'Teheran', '6758845'), +('1381', 'Mashhad', 'IRN', 'Khorasan', '1887405'), +('1382', 'Esfahan', 'IRN', 'Esfahan', '1266072'), +('1383', 'Tabriz', 'IRN', 'East Azerbaidzan', '1191043'), +('1384', 'Shiraz', 'IRN', 'Fars', '1053025'), +('1385', 'Karaj', 'IRN', 'Teheran', '940968'), +('1386', 'Ahvaz', 'IRN', 'Khuzestan', '804980'), +('1387', 'Qom', 'IRN', 'Qom', '777677'), +('1388', 'Kermanshah', 'IRN', 'Kermanshah', '692986'), +('1389', 'Urmia', 'IRN', 'West Azerbaidzan', '435200'), +('1390', 'Zahedan', 'IRN', 'Sistan va Baluchesta', '419518'), +('1391', 'Rasht', 'IRN', 'Gilan', '417748'), +('1392', 'Hamadan', 'IRN', 'Hamadan', '401281'), +('1393', 'Kerman', 'IRN', 'Kerman', '384991'), +('1394', 'Arak', 'IRN', 'Markazi', '380755'), +('1395', 'Ardebil', 'IRN', 'Ardebil', '340386'), +('1396', 'Yazd', 'IRN', 'Yazd', '326776'), +('1397', 'Qazvin', 'IRN', 'Qazvin', '291117'), +('1398', 'Zanjan', 'IRN', 'Zanjan', '286295'), +('1399', 'Sanandaj', 'IRN', 'Kordestan', '277808'), +('1400', 'Bandar-e-Abbas', 'IRN', 'Hormozgan', '273578'), +('1401', 'Khorramabad', 'IRN', 'Lorestan', '272815'), +('1402', 'Eslamshahr', 'IRN', 'Teheran', '265450'), +('1403', 'Borujerd', 'IRN', 'Lorestan', '217804'), +('1404', 'Abadan', 'IRN', 'Khuzestan', '206073'), +('1405', 'Dezful', 'IRN', 'Khuzestan', '202639'), +('1406', 'Kashan', 'IRN', 'Esfahan', '201372'), +('1407', 'Sari', 'IRN', 'Mazandaran', '195882'), +('1408', 'Gorgan', 'IRN', 'Golestan', '188710'), +('1409', 'Najafabad', 'IRN', 'Esfahan', '178498'), +('1410', 'Sabzevar', 'IRN', 'Khorasan', '170738'), +('1411', 'Khomeynishahr', 'IRN', 'Esfahan', '165888'), +('1412', 'Amol', 'IRN', 'Mazandaran', '159092'), +('1413', 'Neyshabur', 'IRN', 'Khorasan', '158847'), +('1414', 'Babol', 'IRN', 'Mazandaran', '158346'), +('1415', 'Khoy', 'IRN', 'West Azerbaidzan', '148944'), +('1416', 'Malayer', 'IRN', 'Hamadan', '144373'), +('1417', 'Bushehr', 'IRN', 'Bushehr', '143641'), +('1418', 'Qaemshahr', 'IRN', 'Mazandaran', '143286'), +('1419', 'Qarchak', 'IRN', 'Teheran', '142690'), +('1420', 'Qods', 'IRN', 'Teheran', '138278'), +('1421', 'Sirjan', 'IRN', 'Kerman', '135024'), +('1422', 'Bojnurd', 'IRN', 'Khorasan', '134835'), +('1423', 'Maragheh', 'IRN', 'East Azerbaidzan', '132318'), +('1424', 'Birjand', 'IRN', 'Khorasan', '127608'), +('1425', 'Ilam', 'IRN', 'Ilam', '126346'), +('1426', 'Bukan', 'IRN', 'West Azerbaidzan', '120020'), +('1427', 'Masjed-e-Soleyman', 'IRN', 'Khuzestan', '116883'), +('1428', 'Saqqez', 'IRN', 'Kordestan', '115394'), +('1429', 'Gonbad-e Qabus', 'IRN', 'Mazandaran', '111253'), +('1430', 'Saveh', 'IRN', 'Qom', '111245'), +('1431', 'Mahabad', 'IRN', 'West Azerbaidzan', '107799'), +('1432', 'Varamin', 'IRN', 'Teheran', '107233'), +('1433', 'Andimeshk', 'IRN', 'Khuzestan', '106923'), +('1434', 'Khorramshahr', 'IRN', 'Khuzestan', '105636'), +('1435', 'Shahrud', 'IRN', 'Semnan', '104765'), +('1436', 'Marv Dasht', 'IRN', 'Fars', '103579'), +('1437', 'Zabol', 'IRN', 'Sistan va Baluchesta', '100887'), +('1438', 'Shahr-e Kord', 'IRN', 'Chaharmahal va Bakht', '100477'), +('1439', 'Bandar-e Anzali', 'IRN', 'Gilan', '98500'), +('1440', 'Rafsanjan', 'IRN', 'Kerman', '98300'), +('1441', 'Marand', 'IRN', 'East Azerbaidzan', '96400'), +('1442', 'Torbat-e Heydariyeh', 'IRN', 'Khorasan', '94600'), +('1443', 'Jahrom', 'IRN', 'Fars', '94200'), +('1444', 'Semnan', 'IRN', 'Semnan', '91045'), +('1445', 'Miandoab', 'IRN', 'West Azerbaidzan', '90100'), +('1446', 'Qomsheh', 'IRN', 'Esfahan', '89800'), +('1447', 'Dublin', 'IRL', 'Leinster', '481854'), +('1448', 'Cork', 'IRL', 'Munster', '127187'), +('1449', 'Reykjavík', 'ISL', 'Höfuđborgarsvćđi', '109184'), +('1450', 'Jerusalem', 'ISR', 'Jerusalem', '633700'), +('1451', 'Tel Aviv-Jaffa', 'ISR', 'Tel Aviv', '348100'), +('1452', 'Haifa', 'ISR', 'Haifa', '265700'), +('1453', 'Rishon Le Ziyyon', 'ISR', 'Ha Merkaz', '188200'), +('1454', 'Beerseba', 'ISR', 'Ha Darom', '163700'), +('1455', 'Holon', 'ISR', 'Tel Aviv', '163100'), +('1456', 'Petah Tiqwa', 'ISR', 'Ha Merkaz', '159400'), +('1457', 'Ashdod', 'ISR', 'Ha Darom', '155800'), +('1458', 'Netanya', 'ISR', 'Ha Merkaz', '154900'), +('1459', 'Bat Yam', 'ISR', 'Tel Aviv', '137000'), +('1460', 'Bene Beraq', 'ISR', 'Tel Aviv', '133900'), +('1461', 'Ramat Gan', 'ISR', 'Tel Aviv', '126900'), +('1462', 'Ashqelon', 'ISR', 'Ha Darom', '92300'), +('1463', 'Rehovot', 'ISR', 'Ha Merkaz', '90300'), +('1464', 'Roma', 'ITA', 'Latium', '2643581'), +('1465', 'Milano', 'ITA', 'Lombardia', '1300977'), +('1466', 'Napoli', 'ITA', 'Campania', '1002619'), +('1467', 'Torino', 'ITA', 'Piemonte', '903705'), +('1468', 'Palermo', 'ITA', 'Sisilia', '683794'), +('1469', 'Genova', 'ITA', 'Liguria', '636104'), +('1470', 'Bologna', 'ITA', 'Emilia-Romagna', '381161'), +('1471', 'Firenze', 'ITA', 'Toscana', '376662'), +('1472', 'Catania', 'ITA', 'Sisilia', '337862'), +('1473', 'Bari', 'ITA', 'Apulia', '331848'), +('1474', 'Venezia', 'ITA', 'Veneto', '277305'), +('1475', 'Messina', 'ITA', 'Sisilia', '259156'), +('1476', 'Verona', 'ITA', 'Veneto', '255268'), +('1477', 'Trieste', 'ITA', 'Friuli-Venezia Giuli', '216459'), +('1478', 'Padova', 'ITA', 'Veneto', '211391'), +('1479', 'Taranto', 'ITA', 'Apulia', '208214'), +('1480', 'Brescia', 'ITA', 'Lombardia', '191317'), +('1481', 'Reggio di Calabria', 'ITA', 'Calabria', '179617'), +('1482', 'Modena', 'ITA', 'Emilia-Romagna', '176022'), +('1483', 'Prato', 'ITA', 'Toscana', '172473'), +('1484', 'Parma', 'ITA', 'Emilia-Romagna', '168717'), +('1485', 'Cagliari', 'ITA', 'Sardinia', '165926'), +('1486', 'Livorno', 'ITA', 'Toscana', '161673'), +('1487', 'Perugia', 'ITA', 'Umbria', '156673'), +('1488', 'Foggia', 'ITA', 'Apulia', '154891'), +('1489', 'Reggio nell´ Emilia', 'ITA', 'Emilia-Romagna', '143664'), +('1490', 'Salerno', 'ITA', 'Campania', '142055'), +('1491', 'Ravenna', 'ITA', 'Emilia-Romagna', '138418'), +('1492', 'Ferrara', 'ITA', 'Emilia-Romagna', '132127'), +('1493', 'Rimini', 'ITA', 'Emilia-Romagna', '131062'), +('1494', 'Syrakusa', 'ITA', 'Sisilia', '126282'), +('1495', 'Sassari', 'ITA', 'Sardinia', '120803'), +('1496', 'Monza', 'ITA', 'Lombardia', '119516'), +('1497', 'Bergamo', 'ITA', 'Lombardia', '117837'), +('1498', 'Pescara', 'ITA', 'Abruzzit', '115698'), +('1499', 'Latina', 'ITA', 'Latium', '114099'), +('1500', 'Vicenza', 'ITA', 'Veneto', '109738'), +('1501', 'Terni', 'ITA', 'Umbria', '107770'), +('1502', 'Forlě', 'ITA', 'Emilia-Romagna', '107475'), +('1503', 'Trento', 'ITA', 'Trentino-Alto Adige', '104906'), +('1504', 'Novara', 'ITA', 'Piemonte', '102037'), +('1505', 'Piacenza', 'ITA', 'Emilia-Romagna', '98384'), +('1506', 'Ancona', 'ITA', 'Marche', '98329'), +('1507', 'Lecce', 'ITA', 'Apulia', '98208'), +('1508', 'Bolzano', 'ITA', 'Trentino-Alto Adige', '97232'), +('1509', 'Catanzaro', 'ITA', 'Calabria', '96700'), +('1510', 'La Spezia', 'ITA', 'Liguria', '95504'), +('1511', 'Udine', 'ITA', 'Friuli-Venezia Giuli', '94932'), +('1512', 'Torre del Greco', 'ITA', 'Campania', '94505'), +('1513', 'Andria', 'ITA', 'Apulia', '94443'), +('1514', 'Brindisi', 'ITA', 'Apulia', '93454'), +('1515', 'Giugliano in Campania', 'ITA', 'Campania', '93286'), +('1516', 'Pisa', 'ITA', 'Toscana', '92379'), +('1517', 'Barletta', 'ITA', 'Apulia', '91904'), +('1518', 'Arezzo', 'ITA', 'Toscana', '91729'), +('1519', 'Alessandria', 'ITA', 'Piemonte', '90289'), +('1520', 'Cesena', 'ITA', 'Emilia-Romagna', '89852'), +('1521', 'Pesaro', 'ITA', 'Marche', '88987'), +('1522', 'Dili', 'TMP', 'Dili', '47900'), +('1523', 'Wien', 'AUT', 'Wien', '1608144'), +('1524', 'Graz', 'AUT', 'Steiermark', '240967'), +('1525', 'Linz', 'AUT', 'North Austria', '188022'), +('1526', 'Salzburg', 'AUT', 'Salzburg', '144247'), +('1527', 'Innsbruck', 'AUT', 'Tiroli', '111752'), +('1528', 'Klagenfurt', 'AUT', 'Kärnten', '91141'), +('1529', 'Spanish Town', 'JAM', 'St. Catherine', '110379'), +('1530', 'Kingston', 'JAM', 'St. Andrew', '103962'), +('1531', 'Portmore', 'JAM', 'St. Andrew', '99799'), +('1532', 'Tokyo', 'JPN', 'Tokyo-to', '7980230'), +('1533', 'Jokohama [Yokohama]', 'JPN', 'Kanagawa', '3339594'), +('1534', 'Osaka', 'JPN', 'Osaka', '2595674'), +('1535', 'Nagoya', 'JPN', 'Aichi', '2154376'), +('1536', 'Sapporo', 'JPN', 'Hokkaido', '1790886'), +('1537', 'Kioto', 'JPN', 'Kyoto', '1461974'), +('1538', 'Kobe', 'JPN', 'Hyogo', '1425139'), +('1539', 'Fukuoka', 'JPN', 'Fukuoka', '1308379'), +('1540', 'Kawasaki', 'JPN', 'Kanagawa', '1217359'), +('1541', 'Hiroshima', 'JPN', 'Hiroshima', '1119117'), +('1542', 'Kitakyushu', 'JPN', 'Fukuoka', '1016264'), +('1543', 'Sendai', 'JPN', 'Miyagi', '989975'), +('1544', 'Chiba', 'JPN', 'Chiba', '863930'), +('1545', 'Sakai', 'JPN', 'Osaka', '797735'), +('1546', 'Kumamoto', 'JPN', 'Kumamoto', '656734'), +('1547', 'Okayama', 'JPN', 'Okayama', '624269'), +('1548', 'Sagamihara', 'JPN', 'Kanagawa', '586300'), +('1549', 'Hamamatsu', 'JPN', 'Shizuoka', '568796'), +('1550', 'Kagoshima', 'JPN', 'Kagoshima', '549977'), +('1551', 'Funabashi', 'JPN', 'Chiba', '545299'), +('1552', 'Higashiosaka', 'JPN', 'Osaka', '517785'), +('1553', 'Hachioji', 'JPN', 'Tokyo-to', '513451'), +('1554', 'Niigata', 'JPN', 'Niigata', '497464'), +('1555', 'Amagasaki', 'JPN', 'Hyogo', '481434'), +('1556', 'Himeji', 'JPN', 'Hyogo', '475167'), +('1557', 'Shizuoka', 'JPN', 'Shizuoka', '473854'), +('1558', 'Urawa', 'JPN', 'Saitama', '469675'), +('1559', 'Matsuyama', 'JPN', 'Ehime', '466133'), +('1560', 'Matsudo', 'JPN', 'Chiba', '461126'), +('1561', 'Kanazawa', 'JPN', 'Ishikawa', '455386'), +('1562', 'Kawaguchi', 'JPN', 'Saitama', '452155'), +('1563', 'Ichikawa', 'JPN', 'Chiba', '441893'), +('1564', 'Omiya', 'JPN', 'Saitama', '441649'), +('1565', 'Utsunomiya', 'JPN', 'Tochigi', '440353'), +('1566', 'Oita', 'JPN', 'Oita', '433401'), +('1567', 'Nagasaki', 'JPN', 'Nagasaki', '432759'), +('1568', 'Yokosuka', 'JPN', 'Kanagawa', '430200'), +('1569', 'Kurashiki', 'JPN', 'Okayama', '425103'), +('1570', 'Gifu', 'JPN', 'Gifu', '408007'), +('1571', 'Hirakata', 'JPN', 'Osaka', '403151'), +('1572', 'Nishinomiya', 'JPN', 'Hyogo', '397618'), +('1573', 'Toyonaka', 'JPN', 'Osaka', '396689'), +('1574', 'Wakayama', 'JPN', 'Wakayama', '391233'), +('1575', 'Fukuyama', 'JPN', 'Hiroshima', '376921'), +('1576', 'Fujisawa', 'JPN', 'Kanagawa', '372840'), +('1577', 'Asahikawa', 'JPN', 'Hokkaido', '364813'), +('1578', 'Machida', 'JPN', 'Tokyo-to', '364197'), +('1579', 'Nara', 'JPN', 'Nara', '362812'), +('1580', 'Takatsuki', 'JPN', 'Osaka', '361747'), +('1581', 'Iwaki', 'JPN', 'Fukushima', '361737'), +('1582', 'Nagano', 'JPN', 'Nagano', '361391'), +('1583', 'Toyohashi', 'JPN', 'Aichi', '360066'), +('1584', 'Toyota', 'JPN', 'Aichi', '346090'), +('1585', 'Suita', 'JPN', 'Osaka', '345750'), +('1586', 'Takamatsu', 'JPN', 'Kagawa', '332471'), +('1587', 'Koriyama', 'JPN', 'Fukushima', '330335'), +('1588', 'Okazaki', 'JPN', 'Aichi', '328711'), +('1589', 'Kawagoe', 'JPN', 'Saitama', '327211'), +('1590', 'Tokorozawa', 'JPN', 'Saitama', '325809'), +('1591', 'Toyama', 'JPN', 'Toyama', '325790'), +('1592', 'Kochi', 'JPN', 'Kochi', '324710'), +('1593', 'Kashiwa', 'JPN', 'Chiba', '320296'), +('1594', 'Akita', 'JPN', 'Akita', '314440'), +('1595', 'Miyazaki', 'JPN', 'Miyazaki', '303784'), +('1596', 'Koshigaya', 'JPN', 'Saitama', '301446'), +('1597', 'Naha', 'JPN', 'Okinawa', '299851'), +('1598', 'Aomori', 'JPN', 'Aomori', '295969'), +('1599', 'Hakodate', 'JPN', 'Hokkaido', '294788'), +('1600', 'Akashi', 'JPN', 'Hyogo', '292253'), +('1601', 'Yokkaichi', 'JPN', 'Mie', '288173'), +('1602', 'Fukushima', 'JPN', 'Fukushima', '287525'), +('1603', 'Morioka', 'JPN', 'Iwate', '287353'), +('1604', 'Maebashi', 'JPN', 'Gumma', '284473'), +('1605', 'Kasugai', 'JPN', 'Aichi', '282348'), +('1606', 'Otsu', 'JPN', 'Shiga', '282070'), +('1607', 'Ichihara', 'JPN', 'Chiba', '279280'), +('1608', 'Yao', 'JPN', 'Osaka', '276421'), +('1609', 'Ichinomiya', 'JPN', 'Aichi', '270828'), +('1610', 'Tokushima', 'JPN', 'Tokushima', '269649'), +('1611', 'Kakogawa', 'JPN', 'Hyogo', '266281'), +('1612', 'Ibaraki', 'JPN', 'Osaka', '261020'), +('1613', 'Neyagawa', 'JPN', 'Osaka', '257315'), +('1614', 'Shimonoseki', 'JPN', 'Yamaguchi', '257263'), +('1615', 'Yamagata', 'JPN', 'Yamagata', '255617'), +('1616', 'Fukui', 'JPN', 'Fukui', '254818'), +('1617', 'Hiratsuka', 'JPN', 'Kanagawa', '254207'), +('1618', 'Mito', 'JPN', 'Ibaragi', '246559'), +('1619', 'Sasebo', 'JPN', 'Nagasaki', '244240'), +('1620', 'Hachinohe', 'JPN', 'Aomori', '242979'), +('1621', 'Takasaki', 'JPN', 'Gumma', '239124'), +('1622', 'Shimizu', 'JPN', 'Shizuoka', '239123'), +('1623', 'Kurume', 'JPN', 'Fukuoka', '235611'), +('1624', 'Fuji', 'JPN', 'Shizuoka', '231527'), +('1625', 'Soka', 'JPN', 'Saitama', '222768'), +('1626', 'Fuchu', 'JPN', 'Tokyo-to', '220576'), +('1627', 'Chigasaki', 'JPN', 'Kanagawa', '216015'), +('1628', 'Atsugi', 'JPN', 'Kanagawa', '212407'), +('1629', 'Numazu', 'JPN', 'Shizuoka', '211382'), +('1630', 'Ageo', 'JPN', 'Saitama', '209442'), +('1631', 'Yamato', 'JPN', 'Kanagawa', '208234'), +('1632', 'Matsumoto', 'JPN', 'Nagano', '206801'), +('1633', 'Kure', 'JPN', 'Hiroshima', '206504'), +('1634', 'Takarazuka', 'JPN', 'Hyogo', '205993'), +('1635', 'Kasukabe', 'JPN', 'Saitama', '201838'), +('1636', 'Chofu', 'JPN', 'Tokyo-to', '201585'), +('1637', 'Odawara', 'JPN', 'Kanagawa', '200171'), +('1638', 'Kofu', 'JPN', 'Yamanashi', '199753'), +('1639', 'Kushiro', 'JPN', 'Hokkaido', '197608'), +('1640', 'Kishiwada', 'JPN', 'Osaka', '197276'), +('1641', 'Hitachi', 'JPN', 'Ibaragi', '196622'), +('1642', 'Nagaoka', 'JPN', 'Niigata', '192407'), +('1643', 'Itami', 'JPN', 'Hyogo', '190886'), +('1644', 'Uji', 'JPN', 'Kyoto', '188735'), +('1645', 'Suzuka', 'JPN', 'Mie', '184061'), +('1646', 'Hirosaki', 'JPN', 'Aomori', '177522'), +('1647', 'Ube', 'JPN', 'Yamaguchi', '175206'), +('1648', 'Kodaira', 'JPN', 'Tokyo-to', '174984'), +('1649', 'Takaoka', 'JPN', 'Toyama', '174380'), +('1650', 'Obihiro', 'JPN', 'Hokkaido', '173685'), +('1651', 'Tomakomai', 'JPN', 'Hokkaido', '171958'), +('1652', 'Saga', 'JPN', 'Saga', '170034'), +('1653', 'Sakura', 'JPN', 'Chiba', '168072'), +('1654', 'Kamakura', 'JPN', 'Kanagawa', '167661'), +('1655', 'Mitaka', 'JPN', 'Tokyo-to', '167268'), +('1656', 'Izumi', 'JPN', 'Osaka', '166979'), +('1657', 'Hino', 'JPN', 'Tokyo-to', '166770'), +('1658', 'Hadano', 'JPN', 'Kanagawa', '166512'), +('1659', 'Ashikaga', 'JPN', 'Tochigi', '165243'), +('1660', 'Tsu', 'JPN', 'Mie', '164543'), +('1661', 'Sayama', 'JPN', 'Saitama', '162472'), +('1662', 'Yachiyo', 'JPN', 'Chiba', '161222'), +('1663', 'Tsukuba', 'JPN', 'Ibaragi', '160768'), +('1664', 'Tachikawa', 'JPN', 'Tokyo-to', '159430'), +('1665', 'Kumagaya', 'JPN', 'Saitama', '157171'), +('1666', 'Moriguchi', 'JPN', 'Osaka', '155941'), +('1667', 'Otaru', 'JPN', 'Hokkaido', '155784'), +('1668', 'Anjo', 'JPN', 'Aichi', '153823'), +('1669', 'Narashino', 'JPN', 'Chiba', '152849'), +('1670', 'Oyama', 'JPN', 'Tochigi', '152820'), +('1671', 'Ogaki', 'JPN', 'Gifu', '151758'), +('1672', 'Matsue', 'JPN', 'Shimane', '149821'), +('1673', 'Kawanishi', 'JPN', 'Hyogo', '149794'), +('1674', 'Hitachinaka', 'JPN', 'Tokyo-to', '148006'), +('1675', 'Niiza', 'JPN', 'Saitama', '147744'), +('1676', 'Nagareyama', 'JPN', 'Chiba', '147738'), +('1677', 'Tottori', 'JPN', 'Tottori', '147523'), +('1678', 'Tama', 'JPN', 'Ibaragi', '146712'), +('1679', 'Iruma', 'JPN', 'Saitama', '145922'), +('1680', 'Ota', 'JPN', 'Gumma', '145317'), +('1681', 'Omuta', 'JPN', 'Fukuoka', '142889'), +('1682', 'Komaki', 'JPN', 'Aichi', '139827'), +('1683', 'Ome', 'JPN', 'Tokyo-to', '139216'), +('1684', 'Kadoma', 'JPN', 'Osaka', '138953'), +('1685', 'Yamaguchi', 'JPN', 'Yamaguchi', '138210'), +('1686', 'Higashimurayama', 'JPN', 'Tokyo-to', '136970'), +('1687', 'Yonago', 'JPN', 'Tottori', '136461'), +('1688', 'Matsubara', 'JPN', 'Osaka', '135010'), +('1689', 'Musashino', 'JPN', 'Tokyo-to', '134426'), +('1690', 'Tsuchiura', 'JPN', 'Ibaragi', '134072'), +('1691', 'Joetsu', 'JPN', 'Niigata', '133505'), +('1692', 'Miyakonojo', 'JPN', 'Miyazaki', '133183'), +('1693', 'Misato', 'JPN', 'Saitama', '132957'), +('1694', 'Kakamigahara', 'JPN', 'Gifu', '131831'), +('1695', 'Daito', 'JPN', 'Osaka', '130594'), +('1696', 'Seto', 'JPN', 'Aichi', '130470'), +('1697', 'Kariya', 'JPN', 'Aichi', '127969'), +('1698', 'Urayasu', 'JPN', 'Chiba', '127550'), +('1699', 'Beppu', 'JPN', 'Oita', '127486'), +('1700', 'Niihama', 'JPN', 'Ehime', '127207'), +('1701', 'Minoo', 'JPN', 'Osaka', '127026'), +('1702', 'Fujieda', 'JPN', 'Shizuoka', '126897'), +('1703', 'Abiko', 'JPN', 'Chiba', '126670'), +('1704', 'Nobeoka', 'JPN', 'Miyazaki', '125547'), +('1705', 'Tondabayashi', 'JPN', 'Osaka', '125094'), +('1706', 'Ueda', 'JPN', 'Nagano', '124217'), +('1707', 'Kashihara', 'JPN', 'Nara', '124013'), +('1708', 'Matsusaka', 'JPN', 'Mie', '123582'), +('1709', 'Isesaki', 'JPN', 'Gumma', '123285'), +('1710', 'Zama', 'JPN', 'Kanagawa', '122046'), +('1711', 'Kisarazu', 'JPN', 'Chiba', '121967'), +('1712', 'Noda', 'JPN', 'Chiba', '121030'), +('1713', 'Ishinomaki', 'JPN', 'Miyagi', '120963'), +('1714', 'Fujinomiya', 'JPN', 'Shizuoka', '119714'), +('1715', 'Kawachinagano', 'JPN', 'Osaka', '119666'), +('1716', 'Imabari', 'JPN', 'Ehime', '119357'), +('1717', 'Aizuwakamatsu', 'JPN', 'Fukushima', '119287'), +('1718', 'Higashihiroshima', 'JPN', 'Hiroshima', '119166'), +('1719', 'Habikino', 'JPN', 'Osaka', '118968'), +('1720', 'Ebetsu', 'JPN', 'Hokkaido', '118805'), +('1721', 'Hofu', 'JPN', 'Yamaguchi', '118751'), +('1722', 'Kiryu', 'JPN', 'Gumma', '118326'), +('1723', 'Okinawa', 'JPN', 'Okinawa', '117748'), +('1724', 'Yaizu', 'JPN', 'Shizuoka', '117258'), +('1725', 'Toyokawa', 'JPN', 'Aichi', '115781'), +('1726', 'Ebina', 'JPN', 'Kanagawa', '115571'), +('1727', 'Asaka', 'JPN', 'Saitama', '114815'), +('1728', 'Higashikurume', 'JPN', 'Tokyo-to', '111666'), +('1729', 'Ikoma', 'JPN', 'Nara', '111645'), +('1730', 'Kitami', 'JPN', 'Hokkaido', '111295'), +('1731', 'Koganei', 'JPN', 'Tokyo-to', '110969'), +('1732', 'Iwatsuki', 'JPN', 'Saitama', '110034'), +('1733', 'Mishima', 'JPN', 'Shizuoka', '109699'), +('1734', 'Handa', 'JPN', 'Aichi', '108600'), +('1735', 'Muroran', 'JPN', 'Hokkaido', '108275'), +('1736', 'Komatsu', 'JPN', 'Ishikawa', '107937'), +('1737', 'Yatsushiro', 'JPN', 'Kumamoto', '107661'), +('1738', 'Iida', 'JPN', 'Nagano', '107583'), +('1739', 'Tokuyama', 'JPN', 'Yamaguchi', '107078'), +('1740', 'Kokubunji', 'JPN', 'Tokyo-to', '106996'), +('1741', 'Akishima', 'JPN', 'Tokyo-to', '106914'), +('1742', 'Iwakuni', 'JPN', 'Yamaguchi', '106647'), +('1743', 'Kusatsu', 'JPN', 'Shiga', '106232'), +('1744', 'Kuwana', 'JPN', 'Mie', '106121'), +('1745', 'Sanda', 'JPN', 'Hyogo', '105643'), +('1746', 'Hikone', 'JPN', 'Shiga', '105508'), +('1747', 'Toda', 'JPN', 'Saitama', '103969'), +('1748', 'Tajimi', 'JPN', 'Gifu', '103171'), +('1749', 'Ikeda', 'JPN', 'Osaka', '102710'), +('1750', 'Fukaya', 'JPN', 'Saitama', '102156'), +('1751', 'Ise', 'JPN', 'Mie', '101732'), +('1752', 'Sakata', 'JPN', 'Yamagata', '101651'), +('1753', 'Kasuga', 'JPN', 'Fukuoka', '101344'), +('1754', 'Kamagaya', 'JPN', 'Chiba', '100821'), +('1755', 'Tsuruoka', 'JPN', 'Yamagata', '100713'), +('1756', 'Hoya', 'JPN', 'Tokyo-to', '100313'), +('1757', 'Nishio', 'JPN', 'Chiba', '100032'), +('1758', 'Tokai', 'JPN', 'Aichi', '99738'), +('1759', 'Inazawa', 'JPN', 'Aichi', '98746'), +('1760', 'Sakado', 'JPN', 'Saitama', '98221'), +('1761', 'Isehara', 'JPN', 'Kanagawa', '98123'), +('1762', 'Takasago', 'JPN', 'Hyogo', '97632'), +('1763', 'Fujimi', 'JPN', 'Saitama', '96972'), +('1764', 'Urasoe', 'JPN', 'Okinawa', '96002'), +('1765', 'Yonezawa', 'JPN', 'Yamagata', '95592'), +('1766', 'Konan', 'JPN', 'Aichi', '95521'), +('1767', 'Yamatokoriyama', 'JPN', 'Nara', '95165'), +('1768', 'Maizuru', 'JPN', 'Kyoto', '94784'), +('1769', 'Onomichi', 'JPN', 'Hiroshima', '93756'), +('1770', 'Higashimatsuyama', 'JPN', 'Saitama', '93342'), +('1771', 'Kimitsu', 'JPN', 'Chiba', '93216'), +('1772', 'Isahaya', 'JPN', 'Nagasaki', '93058'), +('1773', 'Kanuma', 'JPN', 'Tochigi', '93053'), +('1774', 'Izumisano', 'JPN', 'Osaka', '92583'), +('1775', 'Kameoka', 'JPN', 'Kyoto', '92398'), +('1776', 'Mobara', 'JPN', 'Chiba', '91664'), +('1777', 'Narita', 'JPN', 'Chiba', '91470'), +('1778', 'Kashiwazaki', 'JPN', 'Niigata', '91229'), +('1779', 'Tsuyama', 'JPN', 'Okayama', '91170'), +('1780', 'Sanaa', 'YEM', 'Sanaa', '503600'), +('1781', 'Aden', 'YEM', 'Aden', '398300'), +('1782', 'Taizz', 'YEM', 'Taizz', '317600'), +('1783', 'Hodeida', 'YEM', 'Hodeida', '298500'), +('1784', 'al-Mukalla', 'YEM', 'Hadramawt', '122400'), +('1785', 'Ibb', 'YEM', 'Ibb', '103300'), +('1786', 'Amman', 'JOR', 'Amman', '1000000'), +('1787', 'al-Zarqa', 'JOR', 'al-Zarqa', '389815'), +('1788', 'Irbid', 'JOR', 'Irbid', '231511'), +('1789', 'al-Rusayfa', 'JOR', 'al-Zarqa', '137247'), +('1790', 'Wadi al-Sir', 'JOR', 'Amman', '89104'), +('1791', 'Flying Fish Cove', 'CXR', '–', '700'), +('1792', 'Beograd', 'YUG', 'Central Serbia', '1204000'), +('1793', 'Novi Sad', 'YUG', 'Vojvodina', '179626'), +('1794', 'Niš', 'YUG', 'Central Serbia', '175391'), +('1795', 'Priština', 'YUG', 'Kosovo and Metohija', '155496'), +('1796', 'Kragujevac', 'YUG', 'Central Serbia', '147305'), +('1797', 'Podgorica', 'YUG', 'Montenegro', '135000'), +('1798', 'Subotica', 'YUG', 'Vojvodina', '100386'), +('1799', 'Prizren', 'YUG', 'Kosovo and Metohija', '92303'), +('1800', 'Phnom Penh', 'KHM', 'Phnom Penh', '570155'), +('1801', 'Battambang', 'KHM', 'Battambang', '129800'), +('1802', 'Siem Reap', 'KHM', 'Siem Reap', '105100'), +('1803', 'Douala', 'CMR', 'Littoral', '1448300'), +('1804', 'Yaoundé', 'CMR', 'Centre', '1372800'), +('1805', 'Garoua', 'CMR', 'Nord', '177000'), +('1806', 'Maroua', 'CMR', 'Extręme-Nord', '143000'), +('1807', 'Bamenda', 'CMR', 'Nord-Ouest', '138000'), +('1808', 'Bafoussam', 'CMR', 'Ouest', '131000'), +('1809', 'Nkongsamba', 'CMR', 'Littoral', '112454'), +('1810', 'Montréal', 'CAN', 'Québec', '1016376'), +('1811', 'Calgary', 'CAN', 'Alberta', '768082'), +('1812', 'Toronto', 'CAN', 'Ontario', '688275'), +('1813', 'North York', 'CAN', 'Ontario', '622632'), +('1814', 'Winnipeg', 'CAN', 'Manitoba', '618477'), +('1815', 'Edmonton', 'CAN', 'Alberta', '616306'), +('1816', 'Mississauga', 'CAN', 'Ontario', '608072'), +('1817', 'Scarborough', 'CAN', 'Ontario', '594501'), +('1818', 'Vancouver', 'CAN', 'British Colombia', '514008'), +('1819', 'Etobicoke', 'CAN', 'Ontario', '348845'), +('1820', 'London', 'CAN', 'Ontario', '339917'), +('1821', 'Hamilton', 'CAN', 'Ontario', '335614'), +('1822', 'Ottawa', 'CAN', 'Ontario', '335277'), +('1823', 'Laval', 'CAN', 'Québec', '330393'), +('1824', 'Surrey', 'CAN', 'British Colombia', '304477'), +('1825', 'Brampton', 'CAN', 'Ontario', '296711'), +('1826', 'Windsor', 'CAN', 'Ontario', '207588'), +('1827', 'Saskatoon', 'CAN', 'Saskatchewan', '193647'), +('1828', 'Kitchener', 'CAN', 'Ontario', '189959'), +('1829', 'Markham', 'CAN', 'Ontario', '189098'), +('1830', 'Regina', 'CAN', 'Saskatchewan', '180400'), +('1831', 'Burnaby', 'CAN', 'British Colombia', '179209'), +('1832', 'Québec', 'CAN', 'Québec', '167264'), +('1833', 'York', 'CAN', 'Ontario', '154980'), +('1834', 'Richmond', 'CAN', 'British Colombia', '148867'), +('1835', 'Vaughan', 'CAN', 'Ontario', '147889'), +('1836', 'Burlington', 'CAN', 'Ontario', '145150'), +('1837', 'Oshawa', 'CAN', 'Ontario', '140173'), +('1838', 'Oakville', 'CAN', 'Ontario', '139192'), +('1839', 'Saint Catharines', 'CAN', 'Ontario', '136216'), +('1840', 'Longueuil', 'CAN', 'Québec', '127977'), +('1841', 'Richmond Hill', 'CAN', 'Ontario', '116428'), +('1842', 'Thunder Bay', 'CAN', 'Ontario', '115913'), +('1843', 'Nepean', 'CAN', 'Ontario', '115100'), +('1844', 'Cape Breton', 'CAN', 'Nova Scotia', '114733'), +('1845', 'East York', 'CAN', 'Ontario', '114034'), +('1846', 'Halifax', 'CAN', 'Nova Scotia', '113910'), +('1847', 'Cambridge', 'CAN', 'Ontario', '109186'), +('1848', 'Gloucester', 'CAN', 'Ontario', '107314'), +('1849', 'Abbotsford', 'CAN', 'British Colombia', '105403'), +('1850', 'Guelph', 'CAN', 'Ontario', '103593'), +('1851', 'Saint John´s', 'CAN', 'Newfoundland', '101936'), +('1852', 'Coquitlam', 'CAN', 'British Colombia', '101820'), +('1853', 'Saanich', 'CAN', 'British Colombia', '101388'), +('1854', 'Gatineau', 'CAN', 'Québec', '100702'), +('1855', 'Delta', 'CAN', 'British Colombia', '95411'), +('1856', 'Sudbury', 'CAN', 'Ontario', '92686'), +('1857', 'Kelowna', 'CAN', 'British Colombia', '89442'), +('1858', 'Barrie', 'CAN', 'Ontario', '89269'), +('1859', 'Praia', 'CPV', 'Săo Tiago', '94800'), +('1860', 'Almaty', 'KAZ', 'Almaty Qalasy', '1129400'), +('1861', 'Qaraghandy', 'KAZ', 'Qaraghandy', '436900'), +('1862', 'Shymkent', 'KAZ', 'South Kazakstan', '360100'), +('1863', 'Taraz', 'KAZ', 'Taraz', '330100'), +('1864', 'Astana', 'KAZ', 'Astana', '311200'), +('1865', 'Öskemen', 'KAZ', 'East Kazakstan', '311000'), +('1866', 'Pavlodar', 'KAZ', 'Pavlodar', '300500'), +('1867', 'Semey', 'KAZ', 'East Kazakstan', '269600'), +('1868', 'Aqtöbe', 'KAZ', 'Aqtöbe', '253100'), +('1869', 'Qostanay', 'KAZ', 'Qostanay', '221400'), +('1870', 'Petropavl', 'KAZ', 'North Kazakstan', '203500'), +('1871', 'Oral', 'KAZ', 'West Kazakstan', '195500'), +('1872', 'Temirtau', 'KAZ', 'Qaraghandy', '170500'), +('1873', 'Qyzylorda', 'KAZ', 'Qyzylorda', '157400'), +('1874', 'Aqtau', 'KAZ', 'Mangghystau', '143400'), +('1875', 'Atyrau', 'KAZ', 'Atyrau', '142500'), +('1876', 'Ekibastuz', 'KAZ', 'Pavlodar', '127200'), +('1877', 'Kökshetau', 'KAZ', 'North Kazakstan', '123400'), +('1878', 'Rudnyy', 'KAZ', 'Qostanay', '109500'), +('1879', 'Taldyqorghan', 'KAZ', 'Almaty', '98000'), +('1880', 'Zhezqazghan', 'KAZ', 'Qaraghandy', '90000'), +('1881', 'Nairobi', 'KEN', 'Nairobi', '2290000'), +('1882', 'Mombasa', 'KEN', 'Coast', '461753'), +('1883', 'Kisumu', 'KEN', 'Nyanza', '192733'), +('1884', 'Nakuru', 'KEN', 'Rift Valley', '163927'), +('1885', 'Machakos', 'KEN', 'Eastern', '116293'), +('1886', 'Eldoret', 'KEN', 'Rift Valley', '111882'), +('1887', 'Meru', 'KEN', 'Eastern', '94947'), +('1888', 'Nyeri', 'KEN', 'Central', '91258'), +('1889', 'Bangui', 'CAF', 'Bangui', '524000'), +('1890', 'Shanghai', 'CHN', 'Shanghai', '9696300'), +('1891', 'Peking', 'CHN', 'Peking', '7472000'), +('1892', 'Chongqing', 'CHN', 'Chongqing', '6351600'), +('1893', 'Tianjin', 'CHN', 'Tianjin', '5286800'), +('1894', 'Wuhan', 'CHN', 'Hubei', '4344600'), +('1895', 'Harbin', 'CHN', 'Heilongjiang', '4289800'), +('1896', 'Shenyang', 'CHN', 'Liaoning', '4265200'), +('1897', 'Kanton [Guangzhou]', 'CHN', 'Guangdong', '4256300'), +('1898', 'Chengdu', 'CHN', 'Sichuan', '3361500'), +('1899', 'Nanking [Nanjing]', 'CHN', 'Jiangsu', '2870300'), +('1900', 'Changchun', 'CHN', 'Jilin', '2812000'), +('1901', 'Xi´an', 'CHN', 'Shaanxi', '2761400'), +('1902', 'Dalian', 'CHN', 'Liaoning', '2697000'), +('1903', 'Qingdao', 'CHN', 'Shandong', '2596000'), +('1904', 'Jinan', 'CHN', 'Shandong', '2278100'), +('1905', 'Hangzhou', 'CHN', 'Zhejiang', '2190500'), +('1906', 'Zhengzhou', 'CHN', 'Henan', '2107200'), +('1907', 'Shijiazhuang', 'CHN', 'Hebei', '2041500'), +('1908', 'Taiyuan', 'CHN', 'Shanxi', '1968400'), +('1909', 'Kunming', 'CHN', 'Yunnan', '1829500'), +('1910', 'Changsha', 'CHN', 'Hunan', '1809800'), +('1911', 'Nanchang', 'CHN', 'Jiangxi', '1691600'), +('1912', 'Fuzhou', 'CHN', 'Fujian', '1593800'), +('1913', 'Lanzhou', 'CHN', 'Gansu', '1565800'), +('1914', 'Guiyang', 'CHN', 'Guizhou', '1465200'), +('1915', 'Ningbo', 'CHN', 'Zhejiang', '1371200'), +('1916', 'Hefei', 'CHN', 'Anhui', '1369100'), +('1917', 'Urumtši [Ürümqi]', 'CHN', 'Xinxiang', '1310100'), +('1918', 'Anshan', 'CHN', 'Liaoning', '1200000'), +('1919', 'Fushun', 'CHN', 'Liaoning', '1200000'), +('1920', 'Nanning', 'CHN', 'Guangxi', '1161800'), +('1921', 'Zibo', 'CHN', 'Shandong', '1140000'), +('1922', 'Qiqihar', 'CHN', 'Heilongjiang', '1070000'), +('1923', 'Jilin', 'CHN', 'Jilin', '1040000'), +('1924', 'Tangshan', 'CHN', 'Hebei', '1040000'), +('1925', 'Baotou', 'CHN', 'Inner Mongolia', '980000'), +('1926', 'Shenzhen', 'CHN', 'Guangdong', '950500'), +('1927', 'Hohhot', 'CHN', 'Inner Mongolia', '916700'), +('1928', 'Handan', 'CHN', 'Hebei', '840000'), +('1929', 'Wuxi', 'CHN', 'Jiangsu', '830000'), +('1930', 'Xuzhou', 'CHN', 'Jiangsu', '810000'), +('1931', 'Datong', 'CHN', 'Shanxi', '800000'), +('1932', 'Yichun', 'CHN', 'Heilongjiang', '800000'), +('1933', 'Benxi', 'CHN', 'Liaoning', '770000'), +('1934', 'Luoyang', 'CHN', 'Henan', '760000'), +('1935', 'Suzhou', 'CHN', 'Jiangsu', '710000'), +('1936', 'Xining', 'CHN', 'Qinghai', '700200'), +('1937', 'Huainan', 'CHN', 'Anhui', '700000'), +('1938', 'Jixi', 'CHN', 'Heilongjiang', '683885'), +('1939', 'Daqing', 'CHN', 'Heilongjiang', '660000'), +('1940', 'Fuxin', 'CHN', 'Liaoning', '640000'), +('1941', 'Amoy [Xiamen]', 'CHN', 'Fujian', '627500'), +('1942', 'Liuzhou', 'CHN', 'Guangxi', '610000'), +('1943', 'Shantou', 'CHN', 'Guangdong', '580000'), +('1944', 'Jinzhou', 'CHN', 'Liaoning', '570000'), +('1945', 'Mudanjiang', 'CHN', 'Heilongjiang', '570000'), +('1946', 'Yinchuan', 'CHN', 'Ningxia', '544500'), +('1947', 'Changzhou', 'CHN', 'Jiangsu', '530000'), +('1948', 'Zhangjiakou', 'CHN', 'Hebei', '530000'), +('1949', 'Dandong', 'CHN', 'Liaoning', '520000'), +('1950', 'Hegang', 'CHN', 'Heilongjiang', '520000'), +('1951', 'Kaifeng', 'CHN', 'Henan', '510000'), +('1952', 'Jiamusi', 'CHN', 'Heilongjiang', '493409'), +('1953', 'Liaoyang', 'CHN', 'Liaoning', '492559'), +('1954', 'Hengyang', 'CHN', 'Hunan', '487148'), +('1955', 'Baoding', 'CHN', 'Hebei', '483155'), +('1956', 'Hunjiang', 'CHN', 'Jilin', '482043'), +('1957', 'Xinxiang', 'CHN', 'Henan', '473762'), +('1958', 'Huangshi', 'CHN', 'Hubei', '457601'), +('1959', 'Haikou', 'CHN', 'Hainan', '454300'), +('1960', 'Yantai', 'CHN', 'Shandong', '452127'), +('1961', 'Bengbu', 'CHN', 'Anhui', '449245'), +('1962', 'Xiangtan', 'CHN', 'Hunan', '441968'), +('1963', 'Weifang', 'CHN', 'Shandong', '428522'), +('1964', 'Wuhu', 'CHN', 'Anhui', '425740'), +('1965', 'Pingxiang', 'CHN', 'Jiangxi', '425579'), +('1966', 'Yingkou', 'CHN', 'Liaoning', '421589'), +('1967', 'Anyang', 'CHN', 'Henan', '420332'), +('1968', 'Panzhihua', 'CHN', 'Sichuan', '415466'), +('1969', 'Pingdingshan', 'CHN', 'Henan', '410775'), +('1970', 'Xiangfan', 'CHN', 'Hubei', '410407'), +('1971', 'Zhuzhou', 'CHN', 'Hunan', '409924'), +('1972', 'Jiaozuo', 'CHN', 'Henan', '409100'), +('1973', 'Wenzhou', 'CHN', 'Zhejiang', '401871'), +('1974', 'Zhangjiang', 'CHN', 'Guangdong', '400997'), +('1975', 'Zigong', 'CHN', 'Sichuan', '393184'), +('1976', 'Shuangyashan', 'CHN', 'Heilongjiang', '386081'), +('1977', 'Zaozhuang', 'CHN', 'Shandong', '380846'), +('1978', 'Yakeshi', 'CHN', 'Inner Mongolia', '377869'), +('1979', 'Yichang', 'CHN', 'Hubei', '371601'), +('1980', 'Zhenjiang', 'CHN', 'Jiangsu', '368316'), +('1981', 'Huaibei', 'CHN', 'Anhui', '366549'), +('1982', 'Qinhuangdao', 'CHN', 'Hebei', '364972'), +('1983', 'Guilin', 'CHN', 'Guangxi', '364130'), +('1984', 'Liupanshui', 'CHN', 'Guizhou', '363954'), +('1985', 'Panjin', 'CHN', 'Liaoning', '362773'), +('1986', 'Yangquan', 'CHN', 'Shanxi', '362268'), +('1987', 'Jinxi', 'CHN', 'Liaoning', '357052'), +('1988', 'Liaoyuan', 'CHN', 'Jilin', '354141'), +('1989', 'Lianyungang', 'CHN', 'Jiangsu', '354139'), +('1990', 'Xianyang', 'CHN', 'Shaanxi', '352125'), +('1991', 'Tai´an', 'CHN', 'Shandong', '350696'), +('1992', 'Chifeng', 'CHN', 'Inner Mongolia', '350077'), +('1993', 'Shaoguan', 'CHN', 'Guangdong', '350043'), +('1994', 'Nantong', 'CHN', 'Jiangsu', '343341'), +('1995', 'Leshan', 'CHN', 'Sichuan', '341128'), +('1996', 'Baoji', 'CHN', 'Shaanxi', '337765'), +('1997', 'Linyi', 'CHN', 'Shandong', '324720'), +('1998', 'Tonghua', 'CHN', 'Jilin', '324600'), +('1999', 'Siping', 'CHN', 'Jilin', '317223'), +('2000', 'Changzhi', 'CHN', 'Shanxi', '317144'), +('2001', 'Tengzhou', 'CHN', 'Shandong', '315083'), +('2002', 'Chaozhou', 'CHN', 'Guangdong', '313469'), +('2003', 'Yangzhou', 'CHN', 'Jiangsu', '312892'), +('2004', 'Dongwan', 'CHN', 'Guangdong', '308669'), +('2005', 'Ma´anshan', 'CHN', 'Anhui', '305421'), +('2006', 'Foshan', 'CHN', 'Guangdong', '303160'), +('2007', 'Yueyang', 'CHN', 'Hunan', '302800'), +('2008', 'Xingtai', 'CHN', 'Hebei', '302789'), +('2009', 'Changde', 'CHN', 'Hunan', '301276'), +('2010', 'Shihezi', 'CHN', 'Xinxiang', '299676'), +('2011', 'Yancheng', 'CHN', 'Jiangsu', '296831'), +('2012', 'Jiujiang', 'CHN', 'Jiangxi', '291187'), +('2013', 'Dongying', 'CHN', 'Shandong', '281728'), +('2014', 'Shashi', 'CHN', 'Hubei', '281352'), +('2015', 'Xintai', 'CHN', 'Shandong', '281248'), +('2016', 'Jingdezhen', 'CHN', 'Jiangxi', '281183'), +('2017', 'Tongchuan', 'CHN', 'Shaanxi', '280657'), +('2018', 'Zhongshan', 'CHN', 'Guangdong', '278829'), +('2019', 'Shiyan', 'CHN', 'Hubei', '273786'), +('2020', 'Tieli', 'CHN', 'Heilongjiang', '265683'), +('2021', 'Jining', 'CHN', 'Shandong', '265248'), +('2022', 'Wuhai', 'CHN', 'Inner Mongolia', '264081'), +('2023', 'Mianyang', 'CHN', 'Sichuan', '262947'), +('2024', 'Luzhou', 'CHN', 'Sichuan', '262892'), +('2025', 'Zunyi', 'CHN', 'Guizhou', '261862'), +('2026', 'Shizuishan', 'CHN', 'Ningxia', '257862'), +('2027', 'Neijiang', 'CHN', 'Sichuan', '256012'), +('2028', 'Tongliao', 'CHN', 'Inner Mongolia', '255129'), +('2029', 'Tieling', 'CHN', 'Liaoning', '254842'), +('2030', 'Wafangdian', 'CHN', 'Liaoning', '251733'), +('2031', 'Anqing', 'CHN', 'Anhui', '250718'), +('2032', 'Shaoyang', 'CHN', 'Hunan', '247227'), +('2033', 'Laiwu', 'CHN', 'Shandong', '246833'), +('2034', 'Chengde', 'CHN', 'Hebei', '246799'), +('2035', 'Tianshui', 'CHN', 'Gansu', '244974'), +('2036', 'Nanyang', 'CHN', 'Henan', '243303'), +('2037', 'Cangzhou', 'CHN', 'Hebei', '242708'), +('2038', 'Yibin', 'CHN', 'Sichuan', '241019'), +('2039', 'Huaiyin', 'CHN', 'Jiangsu', '239675'), +('2040', 'Dunhua', 'CHN', 'Jilin', '235100'), +('2041', 'Yanji', 'CHN', 'Jilin', '230892'), +('2042', 'Jiangmen', 'CHN', 'Guangdong', '230587'), +('2043', 'Tongling', 'CHN', 'Anhui', '228017'), +('2044', 'Suihua', 'CHN', 'Heilongjiang', '227881'), +('2045', 'Gongziling', 'CHN', 'Jilin', '226569'), +('2046', 'Xiantao', 'CHN', 'Hubei', '222884'), +('2047', 'Chaoyang', 'CHN', 'Liaoning', '222394'), +('2048', 'Ganzhou', 'CHN', 'Jiangxi', '220129'), +('2049', 'Huzhou', 'CHN', 'Zhejiang', '218071'), +('2050', 'Baicheng', 'CHN', 'Jilin', '217987'), +('2051', 'Shangzi', 'CHN', 'Heilongjiang', '215373'), +('2052', 'Yangjiang', 'CHN', 'Guangdong', '215196'), +('2053', 'Qitaihe', 'CHN', 'Heilongjiang', '214957'), +('2054', 'Gejiu', 'CHN', 'Yunnan', '214294'), +('2055', 'Jiangyin', 'CHN', 'Jiangsu', '213659'), +('2056', 'Hebi', 'CHN', 'Henan', '212976'), +('2057', 'Jiaxing', 'CHN', 'Zhejiang', '211526'), +('2058', 'Wuzhou', 'CHN', 'Guangxi', '210452'), +('2059', 'Meihekou', 'CHN', 'Jilin', '209038'), +('2060', 'Xuchang', 'CHN', 'Henan', '208815'), +('2061', 'Liaocheng', 'CHN', 'Shandong', '207844'), +('2062', 'Haicheng', 'CHN', 'Liaoning', '205560'), +('2063', 'Qianjiang', 'CHN', 'Hubei', '205504'), +('2064', 'Baiyin', 'CHN', 'Gansu', '204970'), +('2065', 'Bei´an', 'CHN', 'Heilongjiang', '204899'), +('2066', 'Yixing', 'CHN', 'Jiangsu', '200824'), +('2067', 'Laizhou', 'CHN', 'Shandong', '198664'), +('2068', 'Qaramay', 'CHN', 'Xinxiang', '197602'), +('2069', 'Acheng', 'CHN', 'Heilongjiang', '197595'), +('2070', 'Dezhou', 'CHN', 'Shandong', '195485'), +('2071', 'Nanping', 'CHN', 'Fujian', '195064'), +('2072', 'Zhaoqing', 'CHN', 'Guangdong', '194784'), +('2073', 'Beipiao', 'CHN', 'Liaoning', '194301'), +('2074', 'Fengcheng', 'CHN', 'Jiangxi', '193784'), +('2075', 'Fuyu', 'CHN', 'Jilin', '192981'), +('2076', 'Xinyang', 'CHN', 'Henan', '192509'), +('2077', 'Dongtai', 'CHN', 'Jiangsu', '192247'), +('2078', 'Yuci', 'CHN', 'Shanxi', '191356'), +('2079', 'Honghu', 'CHN', 'Hubei', '190772'), +('2080', 'Ezhou', 'CHN', 'Hubei', '190123'), +('2081', 'Heze', 'CHN', 'Shandong', '189293'), +('2082', 'Daxian', 'CHN', 'Sichuan', '188101'), +('2083', 'Linfen', 'CHN', 'Shanxi', '187309'), +('2084', 'Tianmen', 'CHN', 'Hubei', '186332'), +('2085', 'Yiyang', 'CHN', 'Hunan', '185818'), +('2086', 'Quanzhou', 'CHN', 'Fujian', '185154'), +('2087', 'Rizhao', 'CHN', 'Shandong', '185048'), +('2088', 'Deyang', 'CHN', 'Sichuan', '182488'), +('2089', 'Guangyuan', 'CHN', 'Sichuan', '182241'), +('2090', 'Changshu', 'CHN', 'Jiangsu', '181805'), +('2091', 'Zhangzhou', 'CHN', 'Fujian', '181424'), +('2092', 'Hailar', 'CHN', 'Inner Mongolia', '180650'), +('2093', 'Nanchong', 'CHN', 'Sichuan', '180273'), +('2094', 'Jiutai', 'CHN', 'Jilin', '180130'), +('2095', 'Zhaodong', 'CHN', 'Heilongjiang', '179976'), +('2096', 'Shaoxing', 'CHN', 'Zhejiang', '179818'), +('2097', 'Fuyang', 'CHN', 'Anhui', '179572'), +('2098', 'Maoming', 'CHN', 'Guangdong', '178683'), +('2099', 'Qujing', 'CHN', 'Yunnan', '178669'), +('2100', 'Ghulja', 'CHN', 'Xinxiang', '177193'), +('2101', 'Jiaohe', 'CHN', 'Jilin', '176367'), +('2102', 'Puyang', 'CHN', 'Henan', '175988'), +('2103', 'Huadian', 'CHN', 'Jilin', '175873'), +('2104', 'Jiangyou', 'CHN', 'Sichuan', '175753'), +('2105', 'Qashqar', 'CHN', 'Xinxiang', '174570'), +('2106', 'Anshun', 'CHN', 'Guizhou', '174142'), +('2107', 'Fuling', 'CHN', 'Sichuan', '173878'), +('2108', 'Xinyu', 'CHN', 'Jiangxi', '173524'), +('2109', 'Hanzhong', 'CHN', 'Shaanxi', '169930'), +('2110', 'Danyang', 'CHN', 'Jiangsu', '169603'), +('2111', 'Chenzhou', 'CHN', 'Hunan', '169400'), +('2112', 'Xiaogan', 'CHN', 'Hubei', '166280'), +('2113', 'Shangqiu', 'CHN', 'Henan', '164880'), +('2114', 'Zhuhai', 'CHN', 'Guangdong', '164747'), +('2115', 'Qingyuan', 'CHN', 'Guangdong', '164641'), +('2116', 'Aqsu', 'CHN', 'Xinxiang', '164092'), +('2117', 'Jining', 'CHN', 'Inner Mongolia', '163552'), +('2118', 'Xiaoshan', 'CHN', 'Zhejiang', '162930'), +('2119', 'Zaoyang', 'CHN', 'Hubei', '162198'), +('2120', 'Xinghua', 'CHN', 'Jiangsu', '161910'), +('2121', 'Hami', 'CHN', 'Xinxiang', '161315'), +('2122', 'Huizhou', 'CHN', 'Guangdong', '161023'), +('2123', 'Jinmen', 'CHN', 'Hubei', '160794'), +('2124', 'Sanming', 'CHN', 'Fujian', '160691'), +('2125', 'Ulanhot', 'CHN', 'Inner Mongolia', '159538'), +('2126', 'Korla', 'CHN', 'Xinxiang', '159344'), +('2127', 'Wanxian', 'CHN', 'Sichuan', '156823'), +('2128', 'Rui´an', 'CHN', 'Zhejiang', '156468'), +('2129', 'Zhoushan', 'CHN', 'Zhejiang', '156317'), +('2130', 'Liangcheng', 'CHN', 'Shandong', '156307'), +('2131', 'Jiaozhou', 'CHN', 'Shandong', '153364'), +('2132', 'Taizhou', 'CHN', 'Jiangsu', '152442'), +('2133', 'Suzhou', 'CHN', 'Anhui', '151862'), +('2134', 'Yichun', 'CHN', 'Jiangxi', '151585'), +('2135', 'Taonan', 'CHN', 'Jilin', '150168'), +('2136', 'Pingdu', 'CHN', 'Shandong', '150123'), +('2137', 'Ji´an', 'CHN', 'Jiangxi', '148583'), +('2138', 'Longkou', 'CHN', 'Shandong', '148362'), +('2139', 'Langfang', 'CHN', 'Hebei', '148105'), +('2140', 'Zhoukou', 'CHN', 'Henan', '146288'), +('2141', 'Suining', 'CHN', 'Sichuan', '146086'), +('2142', 'Yulin', 'CHN', 'Guangxi', '144467'), +('2143', 'Jinhua', 'CHN', 'Zhejiang', '144280'), +('2144', 'Liu´an', 'CHN', 'Anhui', '144248'), +('2145', 'Shuangcheng', 'CHN', 'Heilongjiang', '142659'), +('2146', 'Suizhou', 'CHN', 'Hubei', '142302'), +('2147', 'Ankang', 'CHN', 'Shaanxi', '142170'), +('2148', 'Weinan', 'CHN', 'Shaanxi', '140169'), +('2149', 'Longjing', 'CHN', 'Jilin', '139417'), +('2150', 'Da´an', 'CHN', 'Jilin', '138963'), +('2151', 'Lengshuijiang', 'CHN', 'Hunan', '137994'), +('2152', 'Laiyang', 'CHN', 'Shandong', '137080'), +('2153', 'Xianning', 'CHN', 'Hubei', '136811'), +('2154', 'Dali', 'CHN', 'Yunnan', '136554'), +('2155', 'Anda', 'CHN', 'Heilongjiang', '136446'), +('2156', 'Jincheng', 'CHN', 'Shanxi', '136396'), +('2157', 'Longyan', 'CHN', 'Fujian', '134481'), +('2158', 'Xichang', 'CHN', 'Sichuan', '134419'), +('2159', 'Wendeng', 'CHN', 'Shandong', '133910'), +('2160', 'Hailun', 'CHN', 'Heilongjiang', '133565'), +('2161', 'Binzhou', 'CHN', 'Shandong', '133555'), +('2162', 'Linhe', 'CHN', 'Inner Mongolia', '133183'), +('2163', 'Wuwei', 'CHN', 'Gansu', '133101'), +('2164', 'Duyun', 'CHN', 'Guizhou', '132971'), +('2165', 'Mishan', 'CHN', 'Heilongjiang', '132744'), +('2166', 'Shangrao', 'CHN', 'Jiangxi', '132455'), +('2167', 'Changji', 'CHN', 'Xinxiang', '132260'), +('2168', 'Meixian', 'CHN', 'Guangdong', '132156'), +('2169', 'Yushu', 'CHN', 'Jilin', '131861'), +('2170', 'Tiefa', 'CHN', 'Liaoning', '131807'), +('2171', 'Huai´an', 'CHN', 'Jiangsu', '131149'), +('2172', 'Leiyang', 'CHN', 'Hunan', '130115'), +('2173', 'Zalantun', 'CHN', 'Inner Mongolia', '130031'), +('2174', 'Weihai', 'CHN', 'Shandong', '128888'), +('2175', 'Loudi', 'CHN', 'Hunan', '128418'), +('2176', 'Qingzhou', 'CHN', 'Shandong', '128258'), +('2177', 'Qidong', 'CHN', 'Jiangsu', '126872'), +('2178', 'Huaihua', 'CHN', 'Hunan', '126785'), +('2179', 'Luohe', 'CHN', 'Henan', '126438'), +('2180', 'Chuzhou', 'CHN', 'Anhui', '125341'), +('2181', 'Kaiyuan', 'CHN', 'Liaoning', '124219'), +('2182', 'Linqing', 'CHN', 'Shandong', '123958'), +('2183', 'Chaohu', 'CHN', 'Anhui', '123676'), +('2184', 'Laohekou', 'CHN', 'Hubei', '123366'), +('2185', 'Dujiangyan', 'CHN', 'Sichuan', '123357'), +('2186', 'Zhumadian', 'CHN', 'Henan', '123232'), +('2187', 'Linchuan', 'CHN', 'Jiangxi', '121949'), +('2188', 'Jiaonan', 'CHN', 'Shandong', '121397'), +('2189', 'Sanmenxia', 'CHN', 'Henan', '120523'), +('2190', 'Heyuan', 'CHN', 'Guangdong', '120101'), +('2191', 'Manzhouli', 'CHN', 'Inner Mongolia', '120023'), +('2192', 'Lhasa', 'CHN', 'Tibet', '120000'), +('2193', 'Lianyuan', 'CHN', 'Hunan', '118858'), +('2194', 'Kuytun', 'CHN', 'Xinxiang', '118553'), +('2195', 'Puqi', 'CHN', 'Hubei', '117264'), +('2196', 'Hongjiang', 'CHN', 'Hunan', '116188'), +('2197', 'Qinzhou', 'CHN', 'Guangxi', '114586'), +('2198', 'Renqiu', 'CHN', 'Hebei', '114256'), +('2199', 'Yuyao', 'CHN', 'Zhejiang', '114065'), +('2200', 'Guigang', 'CHN', 'Guangxi', '114025'), +('2201', 'Kaili', 'CHN', 'Guizhou', '113958'), +('2202', 'Yan´an', 'CHN', 'Shaanxi', '113277'), +('2203', 'Beihai', 'CHN', 'Guangxi', '112673'), +('2204', 'Xuangzhou', 'CHN', 'Anhui', '112673'), +('2205', 'Quzhou', 'CHN', 'Zhejiang', '112373'), +('2206', 'Yong´an', 'CHN', 'Fujian', '111762'), +('2207', 'Zixing', 'CHN', 'Hunan', '110048'), +('2208', 'Liyang', 'CHN', 'Jiangsu', '109520'), +('2209', 'Yizheng', 'CHN', 'Jiangsu', '109268'), +('2210', 'Yumen', 'CHN', 'Gansu', '109234'), +('2211', 'Liling', 'CHN', 'Hunan', '108504'), +('2212', 'Yuncheng', 'CHN', 'Shanxi', '108359'), +('2213', 'Shanwei', 'CHN', 'Guangdong', '107847'), +('2214', 'Cixi', 'CHN', 'Zhejiang', '107329'), +('2215', 'Yuanjiang', 'CHN', 'Hunan', '107004'), +('2216', 'Bozhou', 'CHN', 'Anhui', '106346'), +('2217', 'Jinchang', 'CHN', 'Gansu', '105287'), +('2218', 'Fu´an', 'CHN', 'Fujian', '105265'), +('2219', 'Suqian', 'CHN', 'Jiangsu', '105021'), +('2220', 'Shishou', 'CHN', 'Hubei', '104571'), +('2221', 'Hengshui', 'CHN', 'Hebei', '104269'), +('2222', 'Danjiangkou', 'CHN', 'Hubei', '103211'), +('2223', 'Fujin', 'CHN', 'Heilongjiang', '103104'), +('2224', 'Sanya', 'CHN', 'Hainan', '102820'), +('2225', 'Guangshui', 'CHN', 'Hubei', '102770'), +('2226', 'Huangshan', 'CHN', 'Anhui', '102628'), +('2227', 'Xingcheng', 'CHN', 'Liaoning', '102384'), +('2228', 'Zhucheng', 'CHN', 'Shandong', '102134'), +('2229', 'Kunshan', 'CHN', 'Jiangsu', '102052'), +('2230', 'Haining', 'CHN', 'Zhejiang', '100478'), +('2231', 'Pingliang', 'CHN', 'Gansu', '99265'), +('2232', 'Fuqing', 'CHN', 'Fujian', '99193'), +('2233', 'Xinzhou', 'CHN', 'Shanxi', '98667'), +('2234', 'Jieyang', 'CHN', 'Guangdong', '98531'), +('2235', 'Zhangjiagang', 'CHN', 'Jiangsu', '97994'), +('2236', 'Tong Xian', 'CHN', 'Peking', '97168'), +('2237', 'Ya´an', 'CHN', 'Sichuan', '95900'), +('2238', 'Jinzhou', 'CHN', 'Liaoning', '95761'), +('2239', 'Emeishan', 'CHN', 'Sichuan', '94000'), +('2240', 'Enshi', 'CHN', 'Hubei', '93056'), +('2241', 'Bose', 'CHN', 'Guangxi', '93009'), +('2242', 'Yuzhou', 'CHN', 'Henan', '92889'), +('2243', 'Kaiyuan', 'CHN', 'Yunnan', '91999'), +('2244', 'Tumen', 'CHN', 'Jilin', '91471'), +('2245', 'Putian', 'CHN', 'Fujian', '91030'), +('2246', 'Linhai', 'CHN', 'Zhejiang', '90870'), +('2247', 'Xilin Hot', 'CHN', 'Inner Mongolia', '90646'), +('2248', 'Shaowu', 'CHN', 'Fujian', '90286'), +('2249', 'Junan', 'CHN', 'Shandong', '90222'), +('2250', 'Huaying', 'CHN', 'Sichuan', '89400'), +('2251', 'Pingyi', 'CHN', 'Shandong', '89373'), +('2252', 'Huangyan', 'CHN', 'Zhejiang', '89288'), +('2253', 'Bishkek', 'KGZ', 'Bishkek shaary', '589400'), +('2254', 'Osh', 'KGZ', 'Osh', '222700'), +('2255', 'Bikenibeu', 'KIR', 'South Tarawa', '5055'), +('2256', 'Bairiki', 'KIR', 'South Tarawa', '2226'), +('2257', 'Santafé de Bogotá', 'COL', 'Santafé de Bogotá', '6260862'), +('2258', 'Cali', 'COL', 'Valle', '2077386'), +('2259', 'Medellín', 'COL', 'Antioquia', '1861265'), +('2260', 'Barranquilla', 'COL', 'Atlántico', '1223260'), +('2261', 'Cartagena', 'COL', 'Bolívar', '805757'), +('2262', 'Cúcuta', 'COL', 'Norte de Santander', '606932'), +('2263', 'Bucaramanga', 'COL', 'Santander', '515555'), +('2264', 'Ibagué', 'COL', 'Tolima', '393664'), +('2265', 'Pereira', 'COL', 'Risaralda', '381725'), +('2266', 'Santa Marta', 'COL', 'Magdalena', '359147'), +('2267', 'Manizales', 'COL', 'Caldas', '337580'), +('2268', 'Bello', 'COL', 'Antioquia', '333470'), +('2269', 'Pasto', 'COL', 'Narińo', '332396'), +('2270', 'Neiva', 'COL', 'Huila', '300052'), +('2271', 'Soledad', 'COL', 'Atlántico', '295058'), +('2272', 'Armenia', 'COL', 'Quindío', '288977'), +('2273', 'Villavicencio', 'COL', 'Meta', '273140'), +('2274', 'Soacha', 'COL', 'Cundinamarca', '272058'), +('2275', 'Valledupar', 'COL', 'Cesar', '263247'), +('2276', 'Montería', 'COL', 'Córdoba', '248245'), +('2277', 'Itagüí', 'COL', 'Antioquia', '228985'), +('2278', 'Palmira', 'COL', 'Valle', '226509'), +('2279', 'Buenaventura', 'COL', 'Valle', '224336'), +('2280', 'Floridablanca', 'COL', 'Santander', '221913'), +('2281', 'Sincelejo', 'COL', 'Sucre', '220704'), +('2282', 'Popayán', 'COL', 'Cauca', '200719'), +('2283', 'Barrancabermeja', 'COL', 'Santander', '178020'), +('2284', 'Dos Quebradas', 'COL', 'Risaralda', '159363'), +('2285', 'Tuluá', 'COL', 'Valle', '152488'), +('2286', 'Envigado', 'COL', 'Antioquia', '135848'), +('2287', 'Cartago', 'COL', 'Valle', '125884'), +('2288', 'Girardot', 'COL', 'Cundinamarca', '110963'), +('2289', 'Buga', 'COL', 'Valle', '110699'), +('2290', 'Tunja', 'COL', 'Boyacá', '109740'), +('2291', 'Florencia', 'COL', 'Caquetá', '108574'), +('2292', 'Maicao', 'COL', 'La Guajira', '108053'), +('2293', 'Sogamoso', 'COL', 'Boyacá', '107728'), +('2294', 'Giron', 'COL', 'Santander', '90688'), +('2295', 'Moroni', 'COM', 'Njazidja', '36000'), +('2296', 'Brazzaville', 'COG', 'Brazzaville', '950000'), +('2297', 'Pointe-Noire', 'COG', 'Kouilou', '500000'), +('2298', 'Kinshasa', 'COD', 'Kinshasa', '5064000'), +('2299', 'Lubumbashi', 'COD', 'Shaba', '851381'), +('2300', 'Mbuji-Mayi', 'COD', 'East Kasai', '806475'), +('2301', 'Kolwezi', 'COD', 'Shaba', '417810'), +('2302', 'Kisangani', 'COD', 'Haute-Zaďre', '417517'), +('2303', 'Kananga', 'COD', 'West Kasai', '393030'), +('2304', 'Likasi', 'COD', 'Shaba', '299118'), +('2305', 'Bukavu', 'COD', 'South Kivu', '201569'), +('2306', 'Kikwit', 'COD', 'Bandundu', '182142'), +('2307', 'Tshikapa', 'COD', 'West Kasai', '180860'), +('2308', 'Matadi', 'COD', 'Bas-Zaďre', '172730'), +('2309', 'Mbandaka', 'COD', 'Equateur', '169841'), +('2310', 'Mwene-Ditu', 'COD', 'East Kasai', '137459'), +('2311', 'Boma', 'COD', 'Bas-Zaďre', '135284'), +('2312', 'Uvira', 'COD', 'South Kivu', '115590'), +('2313', 'Butembo', 'COD', 'North Kivu', '109406'), +('2314', 'Goma', 'COD', 'North Kivu', '109094'), +('2315', 'Kalemie', 'COD', 'Shaba', '101309'), +('2316', 'Bantam', 'CCK', 'Home Island', '503'), +('2317', 'West Island', 'CCK', 'West Island', '167'), +('2318', 'Pyongyang', 'PRK', 'Pyongyang-si', '2484000'), +('2319', 'Hamhung', 'PRK', 'Hamgyong N', '709730'), +('2320', 'Chongjin', 'PRK', 'Hamgyong P', '582480'), +('2321', 'Nampo', 'PRK', 'Nampo-si', '566200'), +('2322', 'Sinuiju', 'PRK', 'Pyongan P', '326011'), +('2323', 'Wonsan', 'PRK', 'Kangwon', '300148'), +('2324', 'Phyongsong', 'PRK', 'Pyongan N', '272934'), +('2325', 'Sariwon', 'PRK', 'Hwanghae P', '254146'), +('2326', 'Haeju', 'PRK', 'Hwanghae N', '229172'), +('2327', 'Kanggye', 'PRK', 'Chagang', '223410'), +('2328', 'Kimchaek', 'PRK', 'Hamgyong P', '179000'), +('2329', 'Hyesan', 'PRK', 'Yanggang', '178020'), +('2330', 'Kaesong', 'PRK', 'Kaesong-si', '171500'), +('2331', 'Seoul', 'KOR', 'Seoul', '9981619'), +('2332', 'Pusan', 'KOR', 'Pusan', '3804522'), +('2333', 'Inchon', 'KOR', 'Inchon', '2559424'), +('2334', 'Taegu', 'KOR', 'Taegu', '2548568'), +('2335', 'Taejon', 'KOR', 'Taejon', '1425835'), +('2336', 'Kwangju', 'KOR', 'Kwangju', '1368341'), +('2337', 'Ulsan', 'KOR', 'Kyongsangnam', '1084891'), +('2338', 'Songnam', 'KOR', 'Kyonggi', '869094'), +('2339', 'Puchon', 'KOR', 'Kyonggi', '779412'), +('2340', 'Suwon', 'KOR', 'Kyonggi', '755550'), +('2341', 'Anyang', 'KOR', 'Kyonggi', '591106'), +('2342', 'Chonju', 'KOR', 'Chollabuk', '563153'), +('2343', 'Chongju', 'KOR', 'Chungchongbuk', '531376'), +('2344', 'Koyang', 'KOR', 'Kyonggi', '518282'), +('2345', 'Ansan', 'KOR', 'Kyonggi', '510314'), +('2346', 'Pohang', 'KOR', 'Kyongsangbuk', '508899'), +('2347', 'Chang-won', 'KOR', 'Kyongsangnam', '481694'), +('2348', 'Masan', 'KOR', 'Kyongsangnam', '441242'), +('2349', 'Kwangmyong', 'KOR', 'Kyonggi', '350914'), +('2350', 'Chonan', 'KOR', 'Chungchongnam', '330259'), +('2351', 'Chinju', 'KOR', 'Kyongsangnam', '329886'), +('2352', 'Iksan', 'KOR', 'Chollabuk', '322685'), +('2353', 'Pyongtaek', 'KOR', 'Kyonggi', '312927'), +('2354', 'Kumi', 'KOR', 'Kyongsangbuk', '311431'), +('2355', 'Uijongbu', 'KOR', 'Kyonggi', '276111'), +('2356', 'Kyongju', 'KOR', 'Kyongsangbuk', '272968'), +('2357', 'Kunsan', 'KOR', 'Chollabuk', '266569'), +('2358', 'Cheju', 'KOR', 'Cheju', '258511'), +('2359', 'Kimhae', 'KOR', 'Kyongsangnam', '256370'), +('2360', 'Sunchon', 'KOR', 'Chollanam', '249263'), +('2361', 'Mokpo', 'KOR', 'Chollanam', '247452'), +('2362', 'Yong-in', 'KOR', 'Kyonggi', '242643'), +('2363', 'Wonju', 'KOR', 'Kang-won', '237460'), +('2364', 'Kunpo', 'KOR', 'Kyonggi', '235233'), +('2365', 'Chunchon', 'KOR', 'Kang-won', '234528'), +('2366', 'Namyangju', 'KOR', 'Kyonggi', '229060'), +('2367', 'Kangnung', 'KOR', 'Kang-won', '220403'), +('2368', 'Chungju', 'KOR', 'Chungchongbuk', '205206'), +('2369', 'Andong', 'KOR', 'Kyongsangbuk', '188443'), +('2370', 'Yosu', 'KOR', 'Chollanam', '183596'), +('2371', 'Kyongsan', 'KOR', 'Kyongsangbuk', '173746'), +('2372', 'Paju', 'KOR', 'Kyonggi', '163379'), +('2373', 'Yangsan', 'KOR', 'Kyongsangnam', '163351'), +('2374', 'Ichon', 'KOR', 'Kyonggi', '155332'), +('2375', 'Asan', 'KOR', 'Chungchongnam', '154663'), +('2376', 'Koje', 'KOR', 'Kyongsangnam', '147562'), +('2377', 'Kimchon', 'KOR', 'Kyongsangbuk', '147027'), +('2378', 'Nonsan', 'KOR', 'Chungchongnam', '146619'), +('2379', 'Kuri', 'KOR', 'Kyonggi', '142173'), +('2380', 'Chong-up', 'KOR', 'Chollabuk', '139111'), +('2381', 'Chechon', 'KOR', 'Chungchongbuk', '137070'), +('2382', 'Sosan', 'KOR', 'Chungchongnam', '134746'), +('2383', 'Shihung', 'KOR', 'Kyonggi', '133443'), +('2384', 'Tong-yong', 'KOR', 'Kyongsangnam', '131717'), +('2385', 'Kongju', 'KOR', 'Chungchongnam', '131229'), +('2386', 'Yongju', 'KOR', 'Kyongsangbuk', '131097'), +('2387', 'Chinhae', 'KOR', 'Kyongsangnam', '125997'), +('2388', 'Sangju', 'KOR', 'Kyongsangbuk', '124116'), +('2389', 'Poryong', 'KOR', 'Chungchongnam', '122604'), +('2390', 'Kwang-yang', 'KOR', 'Chollanam', '122052'), +('2391', 'Miryang', 'KOR', 'Kyongsangnam', '121501'), +('2392', 'Hanam', 'KOR', 'Kyonggi', '115812'), +('2393', 'Kimje', 'KOR', 'Chollabuk', '115427'), +('2394', 'Yongchon', 'KOR', 'Kyongsangbuk', '113511'), +('2395', 'Sachon', 'KOR', 'Kyongsangnam', '113494'), +('2396', 'Uiwang', 'KOR', 'Kyonggi', '108788'), +('2397', 'Naju', 'KOR', 'Chollanam', '107831'), +('2398', 'Namwon', 'KOR', 'Chollabuk', '103544'), +('2399', 'Tonghae', 'KOR', 'Kang-won', '95472'), +('2400', 'Mun-gyong', 'KOR', 'Kyongsangbuk', '92239'), +('2401', 'Athenai', 'GRC', 'Attika', '772072'), +('2402', 'Thessaloniki', 'GRC', 'Central Macedonia', '383967'), +('2403', 'Pireus', 'GRC', 'Attika', '182671'), +('2404', 'Patras', 'GRC', 'West Greece', '153344'), +('2405', 'Peristerion', 'GRC', 'Attika', '137288'), +('2406', 'Herakleion', 'GRC', 'Crete', '116178'), +('2407', 'Kallithea', 'GRC', 'Attika', '114233'), +('2408', 'Larisa', 'GRC', 'Thessalia', '113090'), +('2409', 'Zagreb', 'HRV', 'Grad Zagreb', '706770'), +('2410', 'Split', 'HRV', 'Split-Dalmatia', '189388'), +('2411', 'Rijeka', 'HRV', 'Primorje-Gorski Kota', '167964'), +('2412', 'Osijek', 'HRV', 'Osijek-Baranja', '104761'), +('2413', 'La Habana', 'CUB', 'La Habana', '2256000'), +('2414', 'Santiago de Cuba', 'CUB', 'Santiago de Cuba', '433180'), +('2415', 'Camagüey', 'CUB', 'Camagüey', '298726'), +('2416', 'Holguín', 'CUB', 'Holguín', '249492'), +('2417', 'Santa Clara', 'CUB', 'Villa Clara', '207350'), +('2418', 'Guantánamo', 'CUB', 'Guantánamo', '205078'), +('2419', 'Pinar del Río', 'CUB', 'Pinar del Río', '142100'), +('2420', 'Bayamo', 'CUB', 'Granma', '141000'), +('2421', 'Cienfuegos', 'CUB', 'Cienfuegos', '132770'), +('2422', 'Victoria de las Tunas', 'CUB', 'Las Tunas', '132350'), +('2423', 'Matanzas', 'CUB', 'Matanzas', '123273'), +('2424', 'Manzanillo', 'CUB', 'Granma', '109350'), +('2425', 'Sancti-Spíritus', 'CUB', 'Sancti-Spíritus', '100751'), +('2426', 'Ciego de Ávila', 'CUB', 'Ciego de Ávila', '98505'), +('2427', 'al-Salimiya', 'KWT', 'Hawalli', '130215'), +('2428', 'Jalib al-Shuyukh', 'KWT', 'Hawalli', '102178'), +('2429', 'Kuwait', 'KWT', 'al-Asima', '28859'), +('2430', 'Nicosia', 'CYP', 'Nicosia', '195000'), +('2431', 'Limassol', 'CYP', 'Limassol', '154400'), +('2432', 'Vientiane', 'LAO', 'Viangchan', '531800'), +('2433', 'Savannakhet', 'LAO', 'Savannakhet', '96652'), +('2434', 'Riga', 'LVA', 'Riika', '764328'), +('2435', 'Daugavpils', 'LVA', 'Daugavpils', '114829'), +('2436', 'Liepaja', 'LVA', 'Liepaja', '89439'), +('2437', 'Maseru', 'LSO', 'Maseru', '297000'), +('2438', 'Beirut', 'LBN', 'Beirut', '1100000'), +('2439', 'Tripoli', 'LBN', 'al-Shamal', '240000'), +('2440', 'Monrovia', 'LBR', 'Montserrado', '850000'), +('2441', 'Tripoli', 'LBY', 'Tripoli', '1682000'), +('2442', 'Bengasi', 'LBY', 'Bengasi', '804000'), +('2443', 'Misrata', 'LBY', 'Misrata', '121669'), +('2444', 'al-Zawiya', 'LBY', 'al-Zawiya', '89338'), +('2445', 'Schaan', 'LIE', 'Schaan', '5346'), +('2446', 'Vaduz', 'LIE', 'Vaduz', '5043'), +('2447', 'Vilnius', 'LTU', 'Vilna', '577969'), +('2448', 'Kaunas', 'LTU', 'Kaunas', '412639'), +('2449', 'Klaipeda', 'LTU', 'Klaipeda', '202451'), +('2450', 'Šiauliai', 'LTU', 'Šiauliai', '146563'), +('2451', 'Panevezys', 'LTU', 'Panevezys', '133695'), +('2452', 'Luxembourg [Luxemburg/Lëtzebuerg]', 'LUX', 'Luxembourg', '80700'), +('2453', 'El-Aaiún', 'ESH', 'El-Aaiún', '169000'), +('2454', 'Macao', 'MAC', 'Macau', '437500'), +('2455', 'Antananarivo', 'MDG', 'Antananarivo', '675669'), +('2456', 'Toamasina', 'MDG', 'Toamasina', '127441'), +('2457', 'Antsirabé', 'MDG', 'Antananarivo', '120239'), +('2458', 'Mahajanga', 'MDG', 'Mahajanga', '100807'), +('2459', 'Fianarantsoa', 'MDG', 'Fianarantsoa', '99005'), +('2460', 'Skopje', 'MKD', 'Skopje', '444299'), +('2461', 'Blantyre', 'MWI', 'Blantyre', '478155'), +('2462', 'Lilongwe', 'MWI', 'Lilongwe', '435964'), +('2463', 'Male', 'MDV', 'Maale', '71000'), +('2464', 'Kuala Lumpur', 'MYS', 'Wilayah Persekutuan', '1297526'), +('2465', 'Ipoh', 'MYS', 'Perak', '382853'), +('2466', 'Johor Baharu', 'MYS', 'Johor', '328436'), +('2467', 'Petaling Jaya', 'MYS', 'Selangor', '254350'), +('2468', 'Kelang', 'MYS', 'Selangor', '243355'), +('2469', 'Kuala Terengganu', 'MYS', 'Terengganu', '228119'), +('2470', 'Pinang', 'MYS', 'Pulau Pinang', '219603'), +('2471', 'Kota Bharu', 'MYS', 'Kelantan', '219582'), +('2472', 'Kuantan', 'MYS', 'Pahang', '199484'), +('2473', 'Taiping', 'MYS', 'Perak', '183261'), +('2474', 'Seremban', 'MYS', 'Negeri Sembilan', '182869'), +('2475', 'Kuching', 'MYS', 'Sarawak', '148059'), +('2476', 'Sibu', 'MYS', 'Sarawak', '126381'), +('2477', 'Sandakan', 'MYS', 'Sabah', '125841'), +('2478', 'Alor Setar', 'MYS', 'Kedah', '124412'), +('2479', 'Selayang Baru', 'MYS', 'Selangor', '124228'), +('2480', 'Sungai Petani', 'MYS', 'Kedah', '114763'), +('2481', 'Shah Alam', 'MYS', 'Selangor', '102019'), +('2482', 'Bamako', 'MLI', 'Bamako', '809552'), +('2483', 'Birkirkara', 'MLT', 'Outer Harbour', '21445'), +('2484', 'Valletta', 'MLT', 'Inner Harbour', '7073'), +('2485', 'Casablanca', 'MAR', 'Casablanca', '2940623'), +('2486', 'Rabat', 'MAR', 'Rabat-Salé-Zammour-Z', '623457'), +('2487', 'Marrakech', 'MAR', 'Marrakech-Tensift-Al', '621914'), +('2488', 'Fčs', 'MAR', 'Fčs-Boulemane', '541162'), +('2489', 'Tanger', 'MAR', 'Tanger-Tétouan', '521735'), +('2490', 'Salé', 'MAR', 'Rabat-Salé-Zammour-Z', '504420'), +('2491', 'Meknčs', 'MAR', 'Meknčs-Tafilalet', '460000'), +('2492', 'Oujda', 'MAR', 'Oriental', '365382'), +('2493', 'Kénitra', 'MAR', 'Gharb-Chrarda-Béni H', '292600'), +('2494', 'Tétouan', 'MAR', 'Tanger-Tétouan', '277516'), +('2495', 'Safi', 'MAR', 'Doukkala-Abda', '262300'), +('2496', 'Agadir', 'MAR', 'Souss Massa-Draâ', '155244'), +('2497', 'Mohammedia', 'MAR', 'Casablanca', '154706'), +('2498', 'Khouribga', 'MAR', 'Chaouia-Ouardigha', '152090'), +('2499', 'Beni-Mellal', 'MAR', 'Tadla-Azilal', '140212'), +('2500', 'Témara', 'MAR', 'Rabat-Salé-Zammour-Z', '126303'), +('2501', 'El Jadida', 'MAR', 'Doukkala-Abda', '119083'), +('2502', 'Nador', 'MAR', 'Oriental', '112450'), +('2503', 'Ksar el Kebir', 'MAR', 'Tanger-Tétouan', '107065'), +('2504', 'Settat', 'MAR', 'Chaouia-Ouardigha', '96200'), +('2505', 'Taza', 'MAR', 'Taza-Al Hoceima-Taou', '92700'), +('2506', 'El Araich', 'MAR', 'Tanger-Tétouan', '90400'), +('2507', 'Dalap-Uliga-Darrit', 'MHL', 'Majuro', '28000'), +('2508', 'Fort-de-France', 'MTQ', 'Fort-de-France', '94050'), +('2509', 'Nouakchott', 'MRT', 'Nouakchott', '667300'), +('2510', 'Nouâdhibou', 'MRT', 'Dakhlet Nouâdhibou', '97600'), +('2511', 'Port-Louis', 'MUS', 'Port-Louis', '138200'), +('2512', 'Beau Bassin-Rose Hill', 'MUS', 'Plaines Wilhelms', '100616'), +('2513', 'Vacoas-Phoenix', 'MUS', 'Plaines Wilhelms', '98464'), +('2514', 'Mamoutzou', 'MYT', 'Mamoutzou', '12000'), +('2515', 'Ciudad de México', 'MEX', 'Distrito Federal', '8591309'), +('2516', 'Guadalajara', 'MEX', 'Jalisco', '1647720'), +('2517', 'Ecatepec de Morelos', 'MEX', 'México', '1620303'), +('2518', 'Puebla', 'MEX', 'Puebla', '1346176'), +('2519', 'Nezahualcóyotl', 'MEX', 'México', '1224924'), +('2520', 'Juárez', 'MEX', 'Chihuahua', '1217818'), +('2521', 'Tijuana', 'MEX', 'Baja California', '1212232'), +('2522', 'León', 'MEX', 'Guanajuato', '1133576'), +('2523', 'Monterrey', 'MEX', 'Nuevo León', '1108499'), +('2524', 'Zapopan', 'MEX', 'Jalisco', '1002239'), +('2525', 'Naucalpan de Juárez', 'MEX', 'México', '857511'), +('2526', 'Mexicali', 'MEX', 'Baja California', '764902'), +('2527', 'Culiacán', 'MEX', 'Sinaloa', '744859'), +('2528', 'Acapulco de Juárez', 'MEX', 'Guerrero', '721011'), +('2529', 'Tlalnepantla de Baz', 'MEX', 'México', '720755'), +('2530', 'Mérida', 'MEX', 'Yucatán', '703324'), +('2531', 'Chihuahua', 'MEX', 'Chihuahua', '670208'), +('2532', 'San Luis Potosí', 'MEX', 'San Luis Potosí', '669353'), +('2533', 'Guadalupe', 'MEX', 'Nuevo León', '668780'), +('2534', 'Toluca', 'MEX', 'México', '665617'), +('2535', 'Aguascalientes', 'MEX', 'Aguascalientes', '643360'), +('2536', 'Querétaro', 'MEX', 'Querétaro de Arteaga', '639839'), +('2537', 'Morelia', 'MEX', 'Michoacán de Ocampo', '619958'), +('2538', 'Hermosillo', 'MEX', 'Sonora', '608697'), +('2539', 'Saltillo', 'MEX', 'Coahuila de Zaragoza', '577352'), +('2540', 'Torreón', 'MEX', 'Coahuila de Zaragoza', '529093'), +('2541', 'Centro (Villahermosa)', 'MEX', 'Tabasco', '519873'), +('2542', 'San Nicolás de los Garza', 'MEX', 'Nuevo León', '495540'), +('2543', 'Durango', 'MEX', 'Durango', '490524'), +('2544', 'Chimalhuacán', 'MEX', 'México', '490245'), +('2545', 'Tlaquepaque', 'MEX', 'Jalisco', '475472'), +('2546', 'Atizapán de Zaragoza', 'MEX', 'México', '467262'), +('2547', 'Veracruz', 'MEX', 'Veracruz', '457119'), +('2548', 'Cuautitlán Izcalli', 'MEX', 'México', '452976'), +('2549', 'Irapuato', 'MEX', 'Guanajuato', '440039'), +('2550', 'Tuxtla Gutiérrez', 'MEX', 'Chiapas', '433544'), +('2551', 'Tultitlán', 'MEX', 'México', '432411'), +('2552', 'Reynosa', 'MEX', 'Tamaulipas', '419776'), +('2553', 'Benito Juárez', 'MEX', 'Quintana Roo', '419276'), +('2554', 'Matamoros', 'MEX', 'Tamaulipas', '416428'), +('2555', 'Xalapa', 'MEX', 'Veracruz', '390058'), +('2556', 'Celaya', 'MEX', 'Guanajuato', '382140'), +('2557', 'Mazatlán', 'MEX', 'Sinaloa', '380265'), +('2558', 'Ensenada', 'MEX', 'Baja California', '369573'), +('2559', 'Ahome', 'MEX', 'Sinaloa', '358663'), +('2560', 'Cajeme', 'MEX', 'Sonora', '355679'), +('2561', 'Cuernavaca', 'MEX', 'Morelos', '337966'), +('2562', 'Tonalá', 'MEX', 'Jalisco', '336109'), +('2563', 'Valle de Chalco Solidaridad', 'MEX', 'México', '323113'), +('2564', 'Nuevo Laredo', 'MEX', 'Tamaulipas', '310277'), +('2565', 'Tepic', 'MEX', 'Nayarit', '305025'), +('2566', 'Tampico', 'MEX', 'Tamaulipas', '294789'), +('2567', 'Ixtapaluca', 'MEX', 'México', '293160'), +('2568', 'Apodaca', 'MEX', 'Nuevo León', '282941'), +('2569', 'Guasave', 'MEX', 'Sinaloa', '277201'), +('2570', 'Gómez Palacio', 'MEX', 'Durango', '272806'), +('2571', 'Tapachula', 'MEX', 'Chiapas', '271141'), +('2572', 'Nicolás Romero', 'MEX', 'México', '269393'), +('2573', 'Coatzacoalcos', 'MEX', 'Veracruz', '267037'), +('2574', 'Uruapan', 'MEX', 'Michoacán de Ocampo', '265211'), +('2575', 'Victoria', 'MEX', 'Tamaulipas', '262686'), +('2576', 'Oaxaca de Juárez', 'MEX', 'Oaxaca', '256848'), +('2577', 'Coacalco de Berriozábal', 'MEX', 'México', '252270'), +('2578', 'Pachuca de Soto', 'MEX', 'Hidalgo', '244688'), +('2579', 'General Escobedo', 'MEX', 'Nuevo León', '232961'), +('2580', 'Salamanca', 'MEX', 'Guanajuato', '226864'), +('2581', 'Santa Catarina', 'MEX', 'Nuevo León', '226573'), +('2582', 'Tehuacán', 'MEX', 'Puebla', '225943'), +('2583', 'Chalco', 'MEX', 'México', '222201'), +('2584', 'Cárdenas', 'MEX', 'Tabasco', '216903'), +('2585', 'Campeche', 'MEX', 'Campeche', '216735'), +('2586', 'La Paz', 'MEX', 'México', '213045'), +('2587', 'Othón P. Blanco (Chetumal)', 'MEX', 'Quintana Roo', '208014'), +('2588', 'Texcoco', 'MEX', 'México', '203681'), +('2589', 'La Paz', 'MEX', 'Baja California Sur', '196708'), +('2590', 'Metepec', 'MEX', 'México', '194265'), +('2591', 'Monclova', 'MEX', 'Coahuila de Zaragoza', '193657'), +('2592', 'Huixquilucan', 'MEX', 'México', '193156'), +('2593', 'Chilpancingo de los Bravo', 'MEX', 'Guerrero', '192509'), +('2594', 'Puerto Vallarta', 'MEX', 'Jalisco', '183741'), +('2595', 'Fresnillo', 'MEX', 'Zacatecas', '182744'), +('2596', 'Ciudad Madero', 'MEX', 'Tamaulipas', '182012'), +('2597', 'Soledad de Graciano Sánchez', 'MEX', 'San Luis Potosí', '179956'), +('2598', 'San Juan del Río', 'MEX', 'Querétaro', '179300'), +('2599', 'San Felipe del Progreso', 'MEX', 'México', '177330'), +('2600', 'Córdoba', 'MEX', 'Veracruz', '176952'), +('2601', 'Tecámac', 'MEX', 'México', '172410'), +('2602', 'Ocosingo', 'MEX', 'Chiapas', '171495'), +('2603', 'Carmen', 'MEX', 'Campeche', '171367'), +('2604', 'Lázaro Cárdenas', 'MEX', 'Michoacán de Ocampo', '170878'), +('2605', 'Jiutepec', 'MEX', 'Morelos', '170428'), +('2606', 'Papantla', 'MEX', 'Veracruz', '170123'), +('2607', 'Comalcalco', 'MEX', 'Tabasco', '164640'), +('2608', 'Zamora', 'MEX', 'Michoacán de Ocampo', '161191'), +('2609', 'Nogales', 'MEX', 'Sonora', '159103'), +('2610', 'Huimanguillo', 'MEX', 'Tabasco', '158335'), +('2611', 'Cuautla', 'MEX', 'Morelos', '153132'), +('2612', 'Minatitlán', 'MEX', 'Veracruz', '152983'), +('2613', 'Poza Rica de Hidalgo', 'MEX', 'Veracruz', '152678'), +('2614', 'Ciudad Valles', 'MEX', 'San Luis Potosí', '146411'), +('2615', 'Navolato', 'MEX', 'Sinaloa', '145396'), +('2616', 'San Luis Río Colorado', 'MEX', 'Sonora', '145276'), +('2617', 'Pénjamo', 'MEX', 'Guanajuato', '143927'), +('2618', 'San Andrés Tuxtla', 'MEX', 'Veracruz', '142251'), +('2619', 'Guanajuato', 'MEX', 'Guanajuato', '141215'), +('2620', 'Navojoa', 'MEX', 'Sonora', '140495'), +('2621', 'Zitácuaro', 'MEX', 'Michoacán de Ocampo', '137970'), +('2622', 'Boca del Río', 'MEX', 'Veracruz-Llave', '135721'), +('2623', 'Allende', 'MEX', 'Guanajuato', '134645'), +('2624', 'Silao', 'MEX', 'Guanajuato', '134037'), +('2625', 'Macuspana', 'MEX', 'Tabasco', '133795'), +('2626', 'San Juan Bautista Tuxtepec', 'MEX', 'Oaxaca', '133675'), +('2627', 'San Cristóbal de las Casas', 'MEX', 'Chiapas', '132317'), +('2628', 'Valle de Santiago', 'MEX', 'Guanajuato', '130557'), +('2629', 'Guaymas', 'MEX', 'Sonora', '130108'), +('2630', 'Colima', 'MEX', 'Colima', '129454'), +('2631', 'Dolores Hidalgo', 'MEX', 'Guanajuato', '128675'), +('2632', 'Lagos de Moreno', 'MEX', 'Jalisco', '127949'), +('2633', 'Piedras Negras', 'MEX', 'Coahuila de Zaragoza', '127898'), +('2634', 'Altamira', 'MEX', 'Tamaulipas', '127490'), +('2635', 'Túxpam', 'MEX', 'Veracruz', '126475'), +('2636', 'San Pedro Garza García', 'MEX', 'Nuevo León', '126147'), +('2637', 'Cuauhtémoc', 'MEX', 'Chihuahua', '124279'), +('2638', 'Manzanillo', 'MEX', 'Colima', '124014'), +('2639', 'Iguala de la Independencia', 'MEX', 'Guerrero', '123883'), +('2640', 'Zacatecas', 'MEX', 'Zacatecas', '123700'), +('2641', 'Tlajomulco de Zúńiga', 'MEX', 'Jalisco', '123220'), +('2642', 'Tulancingo de Bravo', 'MEX', 'Hidalgo', '121946'), +('2643', 'Zinacantepec', 'MEX', 'México', '121715'), +('2644', 'San Martín Texmelucan', 'MEX', 'Puebla', '121093'), +('2645', 'Tepatitlán de Morelos', 'MEX', 'Jalisco', '118948'), +('2646', 'Martínez de la Torre', 'MEX', 'Veracruz', '118815'), +('2647', 'Orizaba', 'MEX', 'Veracruz', '118488'), +('2648', 'Apatzingán', 'MEX', 'Michoacán de Ocampo', '117849'), +('2649', 'Atlixco', 'MEX', 'Puebla', '117019'), +('2650', 'Delicias', 'MEX', 'Chihuahua', '116132'), +('2651', 'Ixtlahuaca', 'MEX', 'México', '115548'), +('2652', 'El Mante', 'MEX', 'Tamaulipas', '112453'), +('2653', 'Lerdo', 'MEX', 'Durango', '112272'), +('2654', 'Almoloya de Juárez', 'MEX', 'México', '110550'), +('2655', 'Acámbaro', 'MEX', 'Guanajuato', '110487'), +('2656', 'Acuńa', 'MEX', 'Coahuila de Zaragoza', '110388'), +('2657', 'Guadalupe', 'MEX', 'Zacatecas', '108881'), +('2658', 'Huejutla de Reyes', 'MEX', 'Hidalgo', '108017'), +('2659', 'Hidalgo', 'MEX', 'Michoacán de Ocampo', '106198'), +('2660', 'Los Cabos', 'MEX', 'Baja California Sur', '105199'), +('2661', 'Comitán de Domínguez', 'MEX', 'Chiapas', '104986'), +('2662', 'Cunduacán', 'MEX', 'Tabasco', '104164'), +('2663', 'Río Bravo', 'MEX', 'Tamaulipas', '103901'), +('2664', 'Temapache', 'MEX', 'Veracruz', '102824'), +('2665', 'Chilapa de Alvarez', 'MEX', 'Guerrero', '102716'), +('2666', 'Hidalgo del Parral', 'MEX', 'Chihuahua', '100881'), +('2667', 'San Francisco del Rincón', 'MEX', 'Guanajuato', '100149'), +('2668', 'Taxco de Alarcón', 'MEX', 'Guerrero', '99907'), +('2669', 'Zumpango', 'MEX', 'México', '99781'), +('2670', 'San Pedro Cholula', 'MEX', 'Puebla', '99734'), +('2671', 'Lerma', 'MEX', 'México', '99714'), +('2672', 'Tecomán', 'MEX', 'Colima', '99296'), +('2673', 'Las Margaritas', 'MEX', 'Chiapas', '97389'), +('2674', 'Cosoleacaque', 'MEX', 'Veracruz', '97199'), +('2675', 'San Luis de la Paz', 'MEX', 'Guanajuato', '96763'), +('2676', 'José Azueta', 'MEX', 'Guerrero', '95448'), +('2677', 'Santiago Ixcuintla', 'MEX', 'Nayarit', '95311'), +('2678', 'San Felipe', 'MEX', 'Guanajuato', '95305'), +('2679', 'Tejupilco', 'MEX', 'México', '94934'), +('2680', 'Tantoyuca', 'MEX', 'Veracruz', '94709'), +('2681', 'Salvatierra', 'MEX', 'Guanajuato', '94322'), +('2682', 'Tultepec', 'MEX', 'México', '93364'), +('2683', 'Temixco', 'MEX', 'Morelos', '92686'), +('2684', 'Matamoros', 'MEX', 'Coahuila de Zaragoza', '91858'), +('2685', 'Pánuco', 'MEX', 'Veracruz', '90551'), +('2686', 'El Fuerte', 'MEX', 'Sinaloa', '89556'), +('2687', 'Tierra Blanca', 'MEX', 'Veracruz', '89143'), +('2688', 'Weno', 'FSM', 'Chuuk', '22000'), +('2689', 'Palikir', 'FSM', 'Pohnpei', '8600'), +('2690', 'Chisinau', 'MDA', 'Chisinau', '719900'), +('2691', 'Tiraspol', 'MDA', 'Dnjestria', '194300'), +('2692', 'Balti', 'MDA', 'Balti', '153400'), +('2693', 'Bender (Tîghina)', 'MDA', 'Bender (Tîghina)', '125700'), +('2694', 'Monte-Carlo', 'MCO', '–', '13154'), +('2695', 'Monaco-Ville', 'MCO', '–', '1234'), +('2696', 'Ulan Bator', 'MNG', 'Ulaanbaatar', '773700'), +('2697', 'Plymouth', 'MSR', 'Plymouth', '2000'), +('2698', 'Maputo', 'MOZ', 'Maputo', '1018938'), +('2699', 'Matola', 'MOZ', 'Maputo', '424662'), +('2700', 'Beira', 'MOZ', 'Sofala', '397368'), +('2701', 'Nampula', 'MOZ', 'Nampula', '303346'), +('2702', 'Chimoio', 'MOZ', 'Manica', '171056'), +('2703', 'Naçala-Porto', 'MOZ', 'Nampula', '158248'), +('2704', 'Quelimane', 'MOZ', 'Zambézia', '150116'), +('2705', 'Mocuba', 'MOZ', 'Zambézia', '124700'), +('2706', 'Tete', 'MOZ', 'Tete', '101984'), +('2707', 'Xai-Xai', 'MOZ', 'Gaza', '99442'), +('2708', 'Gurue', 'MOZ', 'Zambézia', '99300'), +('2709', 'Maxixe', 'MOZ', 'Inhambane', '93985'), +('2710', 'Rangoon (Yangon)', 'MMR', 'Rangoon [Yangon]', '3361700'), +('2711', 'Mandalay', 'MMR', 'Mandalay', '885300'), +('2712', 'Moulmein (Mawlamyine)', 'MMR', 'Mon', '307900'), +('2713', 'Pegu (Bago)', 'MMR', 'Pegu [Bago]', '190900'), +('2714', 'Bassein (Pathein)', 'MMR', 'Irrawaddy [Ayeyarwad', '183900'), +('2715', 'Monywa', 'MMR', 'Sagaing', '138600'), +('2716', 'Sittwe (Akyab)', 'MMR', 'Rakhine', '137600'), +('2717', 'Taunggyi (Taunggye)', 'MMR', 'Shan', '131500'), +('2718', 'Meikhtila', 'MMR', 'Mandalay', '129700'), +('2719', 'Mergui (Myeik)', 'MMR', 'Tenasserim [Tanintha', '122700'), +('2720', 'Lashio (Lasho)', 'MMR', 'Shan', '107600'), +('2721', 'Prome (Pyay)', 'MMR', 'Pegu [Bago]', '105700'), +('2722', 'Henzada (Hinthada)', 'MMR', 'Irrawaddy [Ayeyarwad', '104700'), +('2723', 'Myingyan', 'MMR', 'Mandalay', '103600'), +('2724', 'Tavoy (Dawei)', 'MMR', 'Tenasserim [Tanintha', '96800'), +('2725', 'Pagakku (Pakokku)', 'MMR', 'Magwe [Magway]', '94800'), +('2726', 'Windhoek', 'NAM', 'Khomas', '169000'), +('2727', 'Yangor', 'NRU', '–', '4050'), +('2728', 'Yaren', 'NRU', '–', '559'), +('2729', 'Kathmandu', 'NPL', 'Central', '591835'), +('2730', 'Biratnagar', 'NPL', 'Eastern', '157764'), +('2731', 'Pokhara', 'NPL', 'Western', '146318'), +('2732', 'Lalitapur', 'NPL', 'Central', '145847'), +('2733', 'Birgunj', 'NPL', 'Central', '90639'), +('2734', 'Managua', 'NIC', 'Managua', '959000'), +('2735', 'León', 'NIC', 'León', '123865'), +('2736', 'Chinandega', 'NIC', 'Chinandega', '97387'), +('2737', 'Masaya', 'NIC', 'Masaya', '88971'), +('2738', 'Niamey', 'NER', 'Niamey', '420000'), +('2739', 'Zinder', 'NER', 'Zinder', '120892'), +('2740', 'Maradi', 'NER', 'Maradi', '112965'), +('2741', 'Lagos', 'NGA', 'Lagos', '1518000'), +('2742', 'Ibadan', 'NGA', 'Oyo & Osun', '1432000'), +('2743', 'Ogbomosho', 'NGA', 'Oyo & Osun', '730000'), +('2744', 'Kano', 'NGA', 'Kano & Jigawa', '674100'), +('2745', 'Oshogbo', 'NGA', 'Oyo & Osun', '476800'), +('2746', 'Ilorin', 'NGA', 'Kwara & Kogi', '475800'), +('2747', 'Abeokuta', 'NGA', 'Ogun', '427400'), +('2748', 'Port Harcourt', 'NGA', 'Rivers & Bayelsa', '410000'), +('2749', 'Zaria', 'NGA', 'Kaduna', '379200'), +('2750', 'Ilesha', 'NGA', 'Oyo & Osun', '378400'), +('2751', 'Onitsha', 'NGA', 'Anambra & Enugu & Eb', '371900'), +('2752', 'Iwo', 'NGA', 'Oyo & Osun', '362000'), +('2753', 'Ado-Ekiti', 'NGA', 'Ondo & Ekiti', '359400'), +('2754', 'Abuja', 'NGA', 'Federal Capital Dist', '350100'), +('2755', 'Kaduna', 'NGA', 'Kaduna', '342200'), +('2756', 'Mushin', 'NGA', 'Lagos', '333200'), +('2757', 'Maiduguri', 'NGA', 'Borno & Yobe', '320000'), +('2758', 'Enugu', 'NGA', 'Anambra & Enugu & Eb', '316100'), +('2759', 'Ede', 'NGA', 'Oyo & Osun', '307100'), +('2760', 'Aba', 'NGA', 'Imo & Abia', '298900'), +('2761', 'Ife', 'NGA', 'Oyo & Osun', '296800'), +('2762', 'Ila', 'NGA', 'Oyo & Osun', '264000'), +('2763', 'Oyo', 'NGA', 'Oyo & Osun', '256400'), +('2764', 'Ikerre', 'NGA', 'Ondo & Ekiti', '244600'), +('2765', 'Benin City', 'NGA', 'Edo & Delta', '229400'), +('2766', 'Iseyin', 'NGA', 'Oyo & Osun', '217300'), +('2767', 'Katsina', 'NGA', 'Katsina', '206500'), +('2768', 'Jos', 'NGA', 'Plateau & Nassarawa', '206300'), +('2769', 'Sokoto', 'NGA', 'Sokoto & Kebbi & Zam', '204900'), +('2770', 'Ilobu', 'NGA', 'Oyo & Osun', '199000'), +('2771', 'Offa', 'NGA', 'Kwara & Kogi', '197200'), +('2772', 'Ikorodu', 'NGA', 'Lagos', '184900'), +('2773', 'Ilawe-Ekiti', 'NGA', 'Ondo & Ekiti', '184500'), +('2774', 'Owo', 'NGA', 'Ondo & Ekiti', '183500'), +('2775', 'Ikirun', 'NGA', 'Oyo & Osun', '181400'), +('2776', 'Shaki', 'NGA', 'Oyo & Osun', '174500'), +('2777', 'Calabar', 'NGA', 'Cross River', '174400'), +('2778', 'Ondo', 'NGA', 'Ondo & Ekiti', '173600'), +('2779', 'Akure', 'NGA', 'Ondo & Ekiti', '162300'), +('2780', 'Gusau', 'NGA', 'Sokoto & Kebbi & Zam', '158000'), +('2781', 'Ijebu-Ode', 'NGA', 'Ogun', '156400'), +('2782', 'Effon-Alaiye', 'NGA', 'Oyo & Osun', '153100'), +('2783', 'Kumo', 'NGA', 'Bauchi & Gombe', '148000'), +('2784', 'Shomolu', 'NGA', 'Lagos', '147700'), +('2785', 'Oka-Akoko', 'NGA', 'Ondo & Ekiti', '142900'), +('2786', 'Ikare', 'NGA', 'Ondo & Ekiti', '140800'), +('2787', 'Sapele', 'NGA', 'Edo & Delta', '139200'), +('2788', 'Deba Habe', 'NGA', 'Bauchi & Gombe', '138600'), +('2789', 'Minna', 'NGA', 'Niger', '136900'), +('2790', 'Warri', 'NGA', 'Edo & Delta', '126100'), +('2791', 'Bida', 'NGA', 'Niger', '125500'), +('2792', 'Ikire', 'NGA', 'Oyo & Osun', '123300'), +('2793', 'Makurdi', 'NGA', 'Benue', '123100'), +('2794', 'Lafia', 'NGA', 'Plateau & Nassarawa', '122500'), +('2795', 'Inisa', 'NGA', 'Oyo & Osun', '119800'), +('2796', 'Shagamu', 'NGA', 'Ogun', '117200'), +('2797', 'Awka', 'NGA', 'Anambra & Enugu & Eb', '111200'), +('2798', 'Gombe', 'NGA', 'Bauchi & Gombe', '107800'), +('2799', 'Igboho', 'NGA', 'Oyo & Osun', '106800'), +('2800', 'Ejigbo', 'NGA', 'Oyo & Osun', '105900'), +('2801', 'Agege', 'NGA', 'Lagos', '105000'), +('2802', 'Ise-Ekiti', 'NGA', 'Ondo & Ekiti', '103400'), +('2803', 'Ugep', 'NGA', 'Cross River', '102600'), +('2804', 'Epe', 'NGA', 'Lagos', '101000'), +('2805', 'Alofi', 'NIU', '–', '682'), +('2806', 'Kingston', 'NFK', '–', '800'), +('2807', 'Oslo', 'NOR', 'Oslo', '508726'), +('2808', 'Bergen', 'NOR', 'Hordaland', '230948'), +('2809', 'Trondheim', 'NOR', 'Sřr-Trřndelag', '150166'), +('2810', 'Stavanger', 'NOR', 'Rogaland', '108848'), +('2811', 'Bćrum', 'NOR', 'Akershus', '101340'), +('2812', 'Abidjan', 'CIV', 'Abidjan', '2500000'), +('2813', 'Bouaké', 'CIV', 'Bouaké', '329850'), +('2814', 'Yamoussoukro', 'CIV', 'Yamoussoukro', '130000'), +('2815', 'Daloa', 'CIV', 'Daloa', '121842'), +('2816', 'Korhogo', 'CIV', 'Korhogo', '109445'), +('2817', 'al-Sib', 'OMN', 'Masqat', '155000'), +('2818', 'Salala', 'OMN', 'Zufar', '131813'), +('2819', 'Bawshar', 'OMN', 'Masqat', '107500'), +('2820', 'Suhar', 'OMN', 'al-Batina', '90814'), +('2821', 'Masqat', 'OMN', 'Masqat', '51969'), +('2822', 'Karachi', 'PAK', 'Sindh', '9269265'), +('2823', 'Lahore', 'PAK', 'Punjab', '5063499'), +('2824', 'Faisalabad', 'PAK', 'Punjab', '1977246'), +('2825', 'Rawalpindi', 'PAK', 'Punjab', '1406214'), +('2826', 'Multan', 'PAK', 'Punjab', '1182441'), +('2827', 'Hyderabad', 'PAK', 'Sindh', '1151274'), +('2828', 'Gujranwala', 'PAK', 'Punjab', '1124749'), +('2829', 'Peshawar', 'PAK', 'Nothwest Border Prov', '988005'), +('2830', 'Quetta', 'PAK', 'Baluchistan', '560307'), +('2831', 'Islamabad', 'PAK', 'Islamabad', '524500'), +('2832', 'Sargodha', 'PAK', 'Punjab', '455360'), +('2833', 'Sialkot', 'PAK', 'Punjab', '417597'), +('2834', 'Bahawalpur', 'PAK', 'Punjab', '403408'), +('2835', 'Sukkur', 'PAK', 'Sindh', '329176'), +('2836', 'Jhang', 'PAK', 'Punjab', '292214'), +('2837', 'Sheikhupura', 'PAK', 'Punjab', '271875'), +('2838', 'Larkana', 'PAK', 'Sindh', '270366'), +('2839', 'Gujrat', 'PAK', 'Punjab', '250121'), +('2840', 'Mardan', 'PAK', 'Nothwest Border Prov', '244511'), +('2841', 'Kasur', 'PAK', 'Punjab', '241649'), +('2842', 'Rahim Yar Khan', 'PAK', 'Punjab', '228479'), +('2843', 'Sahiwal', 'PAK', 'Punjab', '207388'), +('2844', 'Okara', 'PAK', 'Punjab', '200901'), +('2845', 'Wah', 'PAK', 'Punjab', '198400'), +('2846', 'Dera Ghazi Khan', 'PAK', 'Punjab', '188100'), +('2847', 'Mirpur Khas', 'PAK', 'Sind', '184500'), +('2848', 'Nawabshah', 'PAK', 'Sind', '183100'), +('2849', 'Mingora', 'PAK', 'Nothwest Border Prov', '174500'), +('2850', 'Chiniot', 'PAK', 'Punjab', '169300'), +('2851', 'Kamoke', 'PAK', 'Punjab', '151000'), +('2852', 'Mandi Burewala', 'PAK', 'Punjab', '149900'), +('2853', 'Jhelum', 'PAK', 'Punjab', '145800'), +('2854', 'Sadiqabad', 'PAK', 'Punjab', '141500'), +('2855', 'Jacobabad', 'PAK', 'Sind', '137700'), +('2856', 'Shikarpur', 'PAK', 'Sind', '133300'), +('2857', 'Khanewal', 'PAK', 'Punjab', '133000'), +('2858', 'Hafizabad', 'PAK', 'Punjab', '130200'), +('2859', 'Kohat', 'PAK', 'Nothwest Border Prov', '125300'), +('2860', 'Muzaffargarh', 'PAK', 'Punjab', '121600'), +('2861', 'Khanpur', 'PAK', 'Punjab', '117800'), +('2862', 'Gojra', 'PAK', 'Punjab', '115000'), +('2863', 'Bahawalnagar', 'PAK', 'Punjab', '109600'), +('2864', 'Muridke', 'PAK', 'Punjab', '108600'), +('2865', 'Pak Pattan', 'PAK', 'Punjab', '107800'), +('2866', 'Abottabad', 'PAK', 'Nothwest Border Prov', '106000'), +('2867', 'Tando Adam', 'PAK', 'Sind', '103400'), +('2868', 'Jaranwala', 'PAK', 'Punjab', '103300'), +('2869', 'Khairpur', 'PAK', 'Sind', '102200'), +('2870', 'Chishtian Mandi', 'PAK', 'Punjab', '101700'), +('2871', 'Daska', 'PAK', 'Punjab', '101500'), +('2872', 'Dadu', 'PAK', 'Sind', '98600'), +('2873', 'Mandi Bahauddin', 'PAK', 'Punjab', '97300'), +('2874', 'Ahmadpur East', 'PAK', 'Punjab', '96000'), +('2875', 'Kamalia', 'PAK', 'Punjab', '95300'), +('2876', 'Khuzdar', 'PAK', 'Baluchistan', '93100'), +('2877', 'Vihari', 'PAK', 'Punjab', '92300'), +('2878', 'Dera Ismail Khan', 'PAK', 'Nothwest Border Prov', '90400'), +('2879', 'Wazirabad', 'PAK', 'Punjab', '89700'), +('2880', 'Nowshera', 'PAK', 'Nothwest Border Prov', '89400'), +('2881', 'Koror', 'PLW', 'Koror', '12000'), +('2882', 'Ciudad de Panamá', 'PAN', 'Panamá', '471373'), +('2883', 'San Miguelito', 'PAN', 'San Miguelito', '315382'), +('2884', 'Port Moresby', 'PNG', 'National Capital Dis', '247000'), +('2885', 'Asunción', 'PRY', 'Asunción', '557776'), +('2886', 'Ciudad del Este', 'PRY', 'Alto Paraná', '133881'), +('2887', 'San Lorenzo', 'PRY', 'Central', '133395'), +('2888', 'Lambaré', 'PRY', 'Central', '99681'), +('2889', 'Fernando de la Mora', 'PRY', 'Central', '95287'), +('2890', 'Lima', 'PER', 'Lima', '6464693'), +('2891', 'Arequipa', 'PER', 'Arequipa', '762000'), +('2892', 'Trujillo', 'PER', 'La Libertad', '652000'), +('2893', 'Chiclayo', 'PER', 'Lambayeque', '517000'), +('2894', 'Callao', 'PER', 'Callao', '424294'), +('2895', 'Iquitos', 'PER', 'Loreto', '367000'), +('2896', 'Chimbote', 'PER', 'Ancash', '336000'), +('2897', 'Huancayo', 'PER', 'Junín', '327000'), +('2898', 'Piura', 'PER', 'Piura', '325000'), +('2899', 'Cusco', 'PER', 'Cusco', '291000'), +('2900', 'Pucallpa', 'PER', 'Ucayali', '220866'), +('2901', 'Tacna', 'PER', 'Tacna', '215683'), +('2902', 'Ica', 'PER', 'Ica', '194820'), +('2903', 'Sullana', 'PER', 'Piura', '147361'), +('2904', 'Juliaca', 'PER', 'Puno', '142576'), +('2905', 'Huánuco', 'PER', 'Huanuco', '129688'), +('2906', 'Ayacucho', 'PER', 'Ayacucho', '118960'), +('2907', 'Chincha Alta', 'PER', 'Ica', '110016'), +('2908', 'Cajamarca', 'PER', 'Cajamarca', '108009'), +('2909', 'Puno', 'PER', 'Puno', '101578'), +('2910', 'Ventanilla', 'PER', 'Callao', '101056'), +('2911', 'Castilla', 'PER', 'Piura', '90642'), +('2912', 'Adamstown', 'PCN', '–', '42'), +('2913', 'Garapan', 'MNP', 'Saipan', '9200'), +('2914', 'Lisboa', 'PRT', 'Lisboa', '563210'), +('2915', 'Porto', 'PRT', 'Porto', '273060'), +('2916', 'Amadora', 'PRT', 'Lisboa', '122106'), +('2917', 'Coímbra', 'PRT', 'Coímbra', '96100'), +('2918', 'Braga', 'PRT', 'Braga', '90535'), +('2919', 'San Juan', 'PRI', 'San Juan', '434374'), +('2920', 'Bayamón', 'PRI', 'Bayamón', '224044'), +('2921', 'Ponce', 'PRI', 'Ponce', '186475'), +('2922', 'Carolina', 'PRI', 'Carolina', '186076'), +('2923', 'Caguas', 'PRI', 'Caguas', '140502'), +('2924', 'Arecibo', 'PRI', 'Arecibo', '100131'), +('2925', 'Guaynabo', 'PRI', 'Guaynabo', '100053'), +('2926', 'Mayagüez', 'PRI', 'Mayagüez', '98434'), +('2927', 'Toa Baja', 'PRI', 'Toa Baja', '94085'), +('2928', 'Warszawa', 'POL', 'Mazowieckie', '1615369'), +('2929', 'Lódz', 'POL', 'Lodzkie', '800110'), +('2930', 'Kraków', 'POL', 'Malopolskie', '738150'), +('2931', 'Wroclaw', 'POL', 'Dolnoslaskie', '636765'), +('2932', 'Poznan', 'POL', 'Wielkopolskie', '576899'), +('2933', 'Gdansk', 'POL', 'Pomorskie', '458988'), +('2934', 'Szczecin', 'POL', 'Zachodnio-Pomorskie', '416988'), +('2935', 'Bydgoszcz', 'POL', 'Kujawsko-Pomorskie', '386855'), +('2936', 'Lublin', 'POL', 'Lubelskie', '356251'), +('2937', 'Katowice', 'POL', 'Slaskie', '345934'), +('2938', 'Bialystok', 'POL', 'Podlaskie', '283937'), +('2939', 'Czestochowa', 'POL', 'Slaskie', '257812'), +('2940', 'Gdynia', 'POL', 'Pomorskie', '253521'), +('2941', 'Sosnowiec', 'POL', 'Slaskie', '244102'), +('2942', 'Radom', 'POL', 'Mazowieckie', '232262'), +('2943', 'Kielce', 'POL', 'Swietokrzyskie', '212383'), +('2944', 'Gliwice', 'POL', 'Slaskie', '212164'), +('2945', 'Torun', 'POL', 'Kujawsko-Pomorskie', '206158'), +('2946', 'Bytom', 'POL', 'Slaskie', '205560'), +('2947', 'Zabrze', 'POL', 'Slaskie', '200177'), +('2948', 'Bielsko-Biala', 'POL', 'Slaskie', '180307'), +('2949', 'Olsztyn', 'POL', 'Warminsko-Mazurskie', '170904'), +('2950', 'Rzeszów', 'POL', 'Podkarpackie', '162049'), +('2951', 'Ruda Slaska', 'POL', 'Slaskie', '159665'), +('2952', 'Rybnik', 'POL', 'Slaskie', '144582'), +('2953', 'Walbrzych', 'POL', 'Dolnoslaskie', '136923'), +('2954', 'Tychy', 'POL', 'Slaskie', '133178'), +('2955', 'Dabrowa Górnicza', 'POL', 'Slaskie', '131037'), +('2956', 'Plock', 'POL', 'Mazowieckie', '131011'), +('2957', 'Elblag', 'POL', 'Warminsko-Mazurskie', '129782'), +('2958', 'Opole', 'POL', 'Opolskie', '129553'), +('2959', 'Gorzów Wielkopolski', 'POL', 'Lubuskie', '126019'), +('2960', 'Wloclawek', 'POL', 'Kujawsko-Pomorskie', '123373'), +('2961', 'Chorzów', 'POL', 'Slaskie', '121708'), +('2962', 'Tarnów', 'POL', 'Malopolskie', '121494'), +('2963', 'Zielona Góra', 'POL', 'Lubuskie', '118182'), +('2964', 'Koszalin', 'POL', 'Zachodnio-Pomorskie', '112375'), +('2965', 'Legnica', 'POL', 'Dolnoslaskie', '109335'), +('2966', 'Kalisz', 'POL', 'Wielkopolskie', '106641'), +('2967', 'Grudziadz', 'POL', 'Kujawsko-Pomorskie', '102434'), +('2968', 'Slupsk', 'POL', 'Pomorskie', '102370'), +('2969', 'Jastrzebie-Zdrój', 'POL', 'Slaskie', '102294'), +('2970', 'Jaworzno', 'POL', 'Slaskie', '97929'), +('2971', 'Jelenia Góra', 'POL', 'Dolnoslaskie', '93901'), +('2972', 'Malabo', 'GNQ', 'Bioko', '40000'), +('2973', 'Doha', 'QAT', 'Doha', '355000'), +('2974', 'Paris', 'FRA', 'Île-de-France', '2125246'), +('2975', 'Marseille', 'FRA', 'Provence-Alpes-Côte', '798430'), +('2976', 'Lyon', 'FRA', 'Rhône-Alpes', '445452'), +('2977', 'Toulouse', 'FRA', 'Midi-Pyrénées', '390350'), +('2978', 'Nice', 'FRA', 'Provence-Alpes-Côte', '342738'), +('2979', 'Nantes', 'FRA', 'Pays de la Loire', '270251'), +('2980', 'Strasbourg', 'FRA', 'Alsace', '264115'), +('2981', 'Montpellier', 'FRA', 'Languedoc-Roussillon', '225392'), +('2982', 'Bordeaux', 'FRA', 'Aquitaine', '215363'), +('2983', 'Rennes', 'FRA', 'Haute-Normandie', '206229'), +('2984', 'Le Havre', 'FRA', 'Champagne-Ardenne', '190905'), +('2985', 'Reims', 'FRA', 'Nord-Pas-de-Calais', '187206'), +('2986', 'Lille', 'FRA', 'Rhône-Alpes', '184657'), +('2987', 'St-Étienne', 'FRA', 'Bretagne', '180210'), +('2988', 'Toulon', 'FRA', 'Provence-Alpes-Côte', '160639'), +('2989', 'Grenoble', 'FRA', 'Rhône-Alpes', '153317'), +('2990', 'Angers', 'FRA', 'Pays de la Loire', '151279'), +('2991', 'Dijon', 'FRA', 'Bourgogne', '149867'), +('2992', 'Brest', 'FRA', 'Bretagne', '149634'), +('2993', 'Le Mans', 'FRA', 'Pays de la Loire', '146105'), +('2994', 'Clermont-Ferrand', 'FRA', 'Auvergne', '137140'), +('2995', 'Amiens', 'FRA', 'Picardie', '135501'), +('2996', 'Aix-en-Provence', 'FRA', 'Provence-Alpes-Côte', '134222'), +('2997', 'Limoges', 'FRA', 'Limousin', '133968'), +('2998', 'Nîmes', 'FRA', 'Languedoc-Roussillon', '133424'), +('2999', 'Tours', 'FRA', 'Centre', '132820'), +('3000', 'Villeurbanne', 'FRA', 'Rhône-Alpes', '124215'), +('3001', 'Metz', 'FRA', 'Lorraine', '123776'), +('3002', 'Besançon', 'FRA', 'Franche-Comté', '117733'), +('3003', 'Caen', 'FRA', 'Basse-Normandie', '113987'), +('3004', 'Orléans', 'FRA', 'Centre', '113126'), +('3005', 'Mulhouse', 'FRA', 'Alsace', '110359'), +('3006', 'Rouen', 'FRA', 'Haute-Normandie', '106592'), +('3007', 'Boulogne-Billancourt', 'FRA', 'Île-de-France', '106367'), +('3008', 'Perpignan', 'FRA', 'Languedoc-Roussillon', '105115'), +('3009', 'Nancy', 'FRA', 'Lorraine', '103605'), +('3010', 'Roubaix', 'FRA', 'Nord-Pas-de-Calais', '96984'), +('3011', 'Argenteuil', 'FRA', 'Île-de-France', '93961'), +('3012', 'Tourcoing', 'FRA', 'Nord-Pas-de-Calais', '93540'), +('3013', 'Montreuil', 'FRA', 'Île-de-France', '90674'), +('3014', 'Cayenne', 'GUF', 'Cayenne', '50699'), +('3015', 'Faaa', 'PYF', 'Tahiti', '25888'), +('3016', 'Papeete', 'PYF', 'Tahiti', '25553'), +('3017', 'Saint-Denis', 'REU', 'Saint-Denis', '131480'), +('3018', 'Bucuresti', 'ROM', 'Bukarest', '2016131'), +('3019', 'Iasi', 'ROM', 'Iasi', '348070'), +('3020', 'Constanta', 'ROM', 'Constanta', '342264'), +('3021', 'Cluj-Napoca', 'ROM', 'Cluj', '332498'), +('3022', 'Galati', 'ROM', 'Galati', '330276'), +('3023', 'Timisoara', 'ROM', 'Timis', '324304'), +('3024', 'Brasov', 'ROM', 'Brasov', '314225'), +('3025', 'Craiova', 'ROM', 'Dolj', '313530'), +('3026', 'Ploiesti', 'ROM', 'Prahova', '251348'), +('3027', 'Braila', 'ROM', 'Braila', '233756'), +('3028', 'Oradea', 'ROM', 'Bihor', '222239'), +('3029', 'Bacau', 'ROM', 'Bacau', '209235'), +('3030', 'Pitesti', 'ROM', 'Arges', '187170'), +('3031', 'Arad', 'ROM', 'Arad', '184408'), +('3032', 'Sibiu', 'ROM', 'Sibiu', '169611'), +('3033', 'Târgu Mures', 'ROM', 'Mures', '165153'), +('3034', 'Baia Mare', 'ROM', 'Maramures', '149665'), +('3035', 'Buzau', 'ROM', 'Buzau', '148372'), +('3036', 'Satu Mare', 'ROM', 'Satu Mare', '130059'), +('3037', 'Botosani', 'ROM', 'Botosani', '128730'), +('3038', 'Piatra Neamt', 'ROM', 'Neamt', '125070'), +('3039', 'Râmnicu Vâlcea', 'ROM', 'Vâlcea', '119741'), +('3040', 'Suceava', 'ROM', 'Suceava', '118549'), +('3041', 'Drobeta-Turnu Severin', 'ROM', 'Mehedinti', '117865'), +('3042', 'Târgoviste', 'ROM', 'Dâmbovita', '98980'), +('3043', 'Focsani', 'ROM', 'Vrancea', '98979'), +('3044', 'Târgu Jiu', 'ROM', 'Gorj', '98524'), +('3045', 'Tulcea', 'ROM', 'Tulcea', '96278'), +('3046', 'Resita', 'ROM', 'Caras-Severin', '93976'), +('3047', 'Kigali', 'RWA', 'Kigali', '286000'), +('3048', 'Stockholm', 'SWE', 'Lisboa', '750348'), +('3049', 'Gothenburg [Göteborg]', 'SWE', 'West Götanmaan län', '466990'), +('3050', 'Malmö', 'SWE', 'Skĺne län', '259579'), +('3051', 'Uppsala', 'SWE', 'Uppsala län', '189569'), +('3052', 'Linköping', 'SWE', 'East Götanmaan län', '133168'), +('3053', 'Västerĺs', 'SWE', 'Västmanlands län', '126328'), +('3054', 'Örebro', 'SWE', 'Örebros län', '124207'), +('3055', 'Norrköping', 'SWE', 'East Götanmaan län', '122199'), +('3056', 'Helsingborg', 'SWE', 'Skĺne län', '117737'), +('3057', 'Jönköping', 'SWE', 'Jönköpings län', '117095'), +('3058', 'Umeĺ', 'SWE', 'Västerbottens län', '104512'), +('3059', 'Lund', 'SWE', 'Skĺne län', '98948'), +('3060', 'Borĺs', 'SWE', 'West Götanmaan län', '96883'), +('3061', 'Sundsvall', 'SWE', 'Västernorrlands län', '93126'), +('3062', 'Gävle', 'SWE', 'Gävleborgs län', '90742'), +('3063', 'Jamestown', 'SHN', 'Saint Helena', '1500'), +('3064', 'Basseterre', 'KNA', 'St George Basseterre', '11600'), +('3065', 'Castries', 'LCA', 'Castries', '2301'), +('3066', 'Kingstown', 'VCT', 'St George', '17100'), +('3067', 'Saint-Pierre', 'SPM', 'Saint-Pierre', '5808'), +('3068', 'Berlin', 'DEU', 'Berliini', '3386667'), +('3069', 'Hamburg', 'DEU', 'Hamburg', '1704735'), +('3070', 'Munich [München]', 'DEU', 'Baijeri', '1194560'), +('3071', 'Köln', 'DEU', 'Nordrhein-Westfalen', '962507'), +('3072', 'Frankfurt am Main', 'DEU', 'Hessen', '643821'), +('3073', 'Essen', 'DEU', 'Nordrhein-Westfalen', '599515'), +('3074', 'Dortmund', 'DEU', 'Nordrhein-Westfalen', '590213'), +('3075', 'Stuttgart', 'DEU', 'Baden-Württemberg', '582443'), +('3076', 'Düsseldorf', 'DEU', 'Nordrhein-Westfalen', '568855'), +('3077', 'Bremen', 'DEU', 'Bremen', '540330'), +('3078', 'Duisburg', 'DEU', 'Nordrhein-Westfalen', '519793'), +('3079', 'Hannover', 'DEU', 'Niedersachsen', '514718'), +('3080', 'Leipzig', 'DEU', 'Saksi', '489532'), +('3081', 'Nürnberg', 'DEU', 'Baijeri', '486628'), +('3082', 'Dresden', 'DEU', 'Saksi', '476668'), +('3083', 'Bochum', 'DEU', 'Nordrhein-Westfalen', '392830'), +('3084', 'Wuppertal', 'DEU', 'Nordrhein-Westfalen', '368993'), +('3085', 'Bielefeld', 'DEU', 'Nordrhein-Westfalen', '321125'), +('3086', 'Mannheim', 'DEU', 'Baden-Württemberg', '307730'), +('3087', 'Bonn', 'DEU', 'Nordrhein-Westfalen', '301048'), +('3088', 'Gelsenkirchen', 'DEU', 'Nordrhein-Westfalen', '281979'), +('3089', 'Karlsruhe', 'DEU', 'Baden-Württemberg', '277204'), +('3090', 'Wiesbaden', 'DEU', 'Hessen', '268716'), +('3091', 'Münster', 'DEU', 'Nordrhein-Westfalen', '264670'), +('3092', 'Mönchengladbach', 'DEU', 'Nordrhein-Westfalen', '263697'), +('3093', 'Chemnitz', 'DEU', 'Saksi', '263222'), +('3094', 'Augsburg', 'DEU', 'Baijeri', '254867'), +('3095', 'Halle/Saale', 'DEU', 'Anhalt Sachsen', '254360'), +('3096', 'Braunschweig', 'DEU', 'Niedersachsen', '246322'), +('3097', 'Aachen', 'DEU', 'Nordrhein-Westfalen', '243825'), +('3098', 'Krefeld', 'DEU', 'Nordrhein-Westfalen', '241769'), +('3099', 'Magdeburg', 'DEU', 'Anhalt Sachsen', '235073'), +('3100', 'Kiel', 'DEU', 'Schleswig-Holstein', '233795'), +('3101', 'Oberhausen', 'DEU', 'Nordrhein-Westfalen', '222349'), +('3102', 'Lübeck', 'DEU', 'Schleswig-Holstein', '213326'), +('3103', 'Hagen', 'DEU', 'Nordrhein-Westfalen', '205201'), +('3104', 'Rostock', 'DEU', 'Mecklenburg-Vorpomme', '203279'), +('3105', 'Freiburg im Breisgau', 'DEU', 'Baden-Württemberg', '202455'), +('3106', 'Erfurt', 'DEU', 'Thüringen', '201267'), +('3107', 'Kassel', 'DEU', 'Hessen', '196211'), +('3108', 'Saarbrücken', 'DEU', 'Saarland', '183836'), +('3109', 'Mainz', 'DEU', 'Rheinland-Pfalz', '183134'), +('3110', 'Hamm', 'DEU', 'Nordrhein-Westfalen', '181804'), +('3111', 'Herne', 'DEU', 'Nordrhein-Westfalen', '175661'), +('3112', 'Mülheim an der Ruhr', 'DEU', 'Nordrhein-Westfalen', '173895'), +('3113', 'Solingen', 'DEU', 'Nordrhein-Westfalen', '165583'), +('3114', 'Osnabrück', 'DEU', 'Niedersachsen', '164539'), +('3115', 'Ludwigshafen am Rhein', 'DEU', 'Rheinland-Pfalz', '163771'), +('3116', 'Leverkusen', 'DEU', 'Nordrhein-Westfalen', '160841'), +('3117', 'Oldenburg', 'DEU', 'Niedersachsen', '154125'), +('3118', 'Neuss', 'DEU', 'Nordrhein-Westfalen', '149702'), +('3119', 'Heidelberg', 'DEU', 'Baden-Württemberg', '139672'), +('3120', 'Darmstadt', 'DEU', 'Hessen', '137776'), +('3121', 'Paderborn', 'DEU', 'Nordrhein-Westfalen', '137647'), +('3122', 'Potsdam', 'DEU', 'Brandenburg', '128983'), +('3123', 'Würzburg', 'DEU', 'Baijeri', '127350'), +('3124', 'Regensburg', 'DEU', 'Baijeri', '125236'), +('3125', 'Recklinghausen', 'DEU', 'Nordrhein-Westfalen', '125022'), +('3126', 'Göttingen', 'DEU', 'Niedersachsen', '124775'), +('3127', 'Bremerhaven', 'DEU', 'Bremen', '122735'), +('3128', 'Wolfsburg', 'DEU', 'Niedersachsen', '121954'), +('3129', 'Bottrop', 'DEU', 'Nordrhein-Westfalen', '121097'), +('3130', 'Remscheid', 'DEU', 'Nordrhein-Westfalen', '120125'), +('3131', 'Heilbronn', 'DEU', 'Baden-Württemberg', '119526'), +('3132', 'Pforzheim', 'DEU', 'Baden-Württemberg', '117227'), +('3133', 'Offenbach am Main', 'DEU', 'Hessen', '116627'), +('3134', 'Ulm', 'DEU', 'Baden-Württemberg', '116103'), +('3135', 'Ingolstadt', 'DEU', 'Baijeri', '114826'), +('3136', 'Gera', 'DEU', 'Thüringen', '114718'), +('3137', 'Salzgitter', 'DEU', 'Niedersachsen', '112934'), +('3138', 'Cottbus', 'DEU', 'Brandenburg', '110894'), +('3139', 'Reutlingen', 'DEU', 'Baden-Württemberg', '110343'), +('3140', 'Fürth', 'DEU', 'Baijeri', '109771'), +('3141', 'Siegen', 'DEU', 'Nordrhein-Westfalen', '109225'), +('3142', 'Koblenz', 'DEU', 'Rheinland-Pfalz', '108003'), +('3143', 'Moers', 'DEU', 'Nordrhein-Westfalen', '106837'), +('3144', 'Bergisch Gladbach', 'DEU', 'Nordrhein-Westfalen', '106150'), +('3145', 'Zwickau', 'DEU', 'Saksi', '104146'), +('3146', 'Hildesheim', 'DEU', 'Niedersachsen', '104013'), +('3147', 'Witten', 'DEU', 'Nordrhein-Westfalen', '103384'), +('3148', 'Schwerin', 'DEU', 'Mecklenburg-Vorpomme', '102878'), +('3149', 'Erlangen', 'DEU', 'Baijeri', '100750'), +('3150', 'Kaiserslautern', 'DEU', 'Rheinland-Pfalz', '100025'), +('3151', 'Trier', 'DEU', 'Rheinland-Pfalz', '99891'), +('3152', 'Jena', 'DEU', 'Thüringen', '99779'), +('3153', 'Iserlohn', 'DEU', 'Nordrhein-Westfalen', '99474'), +('3154', 'Gütersloh', 'DEU', 'Nordrhein-Westfalen', '95028'), +('3155', 'Marl', 'DEU', 'Nordrhein-Westfalen', '93735'), +('3156', 'Lünen', 'DEU', 'Nordrhein-Westfalen', '92044'), +('3157', 'Düren', 'DEU', 'Nordrhein-Westfalen', '91092'), +('3158', 'Ratingen', 'DEU', 'Nordrhein-Westfalen', '90951'), +('3159', 'Velbert', 'DEU', 'Nordrhein-Westfalen', '89881'), +('3160', 'Esslingen am Neckar', 'DEU', 'Baden-Württemberg', '89667'), +('3161', 'Honiara', 'SLB', 'Honiara', '50100'), +('3162', 'Lusaka', 'ZMB', 'Lusaka', '1317000'), +('3163', 'Ndola', 'ZMB', 'Copperbelt', '329200'), +('3164', 'Kitwe', 'ZMB', 'Copperbelt', '288600'), +('3165', 'Kabwe', 'ZMB', 'Central', '154300'), +('3166', 'Chingola', 'ZMB', 'Copperbelt', '142400'), +('3167', 'Mufulira', 'ZMB', 'Copperbelt', '123900'), +('3168', 'Luanshya', 'ZMB', 'Copperbelt', '118100'), +('3169', 'Apia', 'WSM', 'Upolu', '35900'), +('3170', 'Serravalle', 'SMR', 'Serravalle/Dogano', '4802'), +('3171', 'San Marino', 'SMR', 'San Marino', '2294'), +('3172', 'Săo Tomé', 'STP', 'Aqua Grande', '49541'), +('3173', 'Riyadh', 'SAU', 'Riyadh', '3324000'), +('3174', 'Jedda', 'SAU', 'Mekka', '2046300'), +('3175', 'Mekka', 'SAU', 'Mekka', '965700'), +('3176', 'Medina', 'SAU', 'Medina', '608300'), +('3177', 'al-Dammam', 'SAU', 'al-Sharqiya', '482300'), +('3178', 'al-Taif', 'SAU', 'Mekka', '416100'), +('3179', 'Tabuk', 'SAU', 'Tabuk', '292600'), +('3180', 'Burayda', 'SAU', 'al-Qasim', '248600'), +('3181', 'al-Hufuf', 'SAU', 'al-Sharqiya', '225800'), +('3182', 'al-Mubarraz', 'SAU', 'al-Sharqiya', '219100'), +('3183', 'Khamis Mushayt', 'SAU', 'Asir', '217900'), +('3184', 'Hail', 'SAU', 'Hail', '176800'), +('3185', 'al-Kharj', 'SAU', 'Riad', '152100'), +('3186', 'al-Khubar', 'SAU', 'al-Sharqiya', '141700'), +('3187', 'Jubayl', 'SAU', 'al-Sharqiya', '140800'), +('3188', 'Hafar al-Batin', 'SAU', 'al-Sharqiya', '137800'), +('3189', 'al-Tuqba', 'SAU', 'al-Sharqiya', '125700'), +('3190', 'Yanbu', 'SAU', 'Medina', '119800'), +('3191', 'Abha', 'SAU', 'Asir', '112300'), +('3192', 'Ara´ar', 'SAU', 'al-Khudud al-Samaliy', '108100'), +('3193', 'al-Qatif', 'SAU', 'al-Sharqiya', '98900'), +('3194', 'al-Hawiya', 'SAU', 'Mekka', '93900'), +('3195', 'Unayza', 'SAU', 'Qasim', '91100'), +('3196', 'Najran', 'SAU', 'Najran', '91000'), +('3197', 'Pikine', 'SEN', 'Cap-Vert', '855287'), +('3198', 'Dakar', 'SEN', 'Cap-Vert', '785071'), +('3199', 'Thičs', 'SEN', 'Thičs', '248000'), +('3200', 'Kaolack', 'SEN', 'Kaolack', '199000'), +('3201', 'Ziguinchor', 'SEN', 'Ziguinchor', '192000'), +('3202', 'Rufisque', 'SEN', 'Cap-Vert', '150000'), +('3203', 'Saint-Louis', 'SEN', 'Saint-Louis', '132400'), +('3204', 'Mbour', 'SEN', 'Thičs', '109300'), +('3205', 'Diourbel', 'SEN', 'Diourbel', '99400'), +('3206', 'Victoria', 'SYC', 'Mahé', '41000'), +('3207', 'Freetown', 'SLE', 'Western', '850000'), +('3208', 'Singapore', 'SGP', '–', '4017733'), +('3209', 'Bratislava', 'SVK', 'Bratislava', '448292'), +('3210', 'Košice', 'SVK', 'Východné Slovensko', '241874'), +('3211', 'Prešov', 'SVK', 'Východné Slovensko', '93977'), +('3212', 'Ljubljana', 'SVN', 'Osrednjeslovenska', '270986'), +('3213', 'Maribor', 'SVN', 'Podravska', '115532'), +('3214', 'Mogadishu', 'SOM', 'Banaadir', '997000'), +('3215', 'Hargeysa', 'SOM', 'Woqooyi Galbeed', '90000'), +('3216', 'Kismaayo', 'SOM', 'Jubbada Hoose', '90000'), +('3217', 'Colombo', 'LKA', 'Western', '645000'), +('3218', 'Dehiwala', 'LKA', 'Western', '203000'), +('3219', 'Moratuwa', 'LKA', 'Western', '190000'), +('3220', 'Jaffna', 'LKA', 'Northern', '149000'), +('3221', 'Kandy', 'LKA', 'Central', '140000'), +('3222', 'Sri Jayawardenepura Kotte', 'LKA', 'Western', '118000'), +('3223', 'Negombo', 'LKA', 'Western', '100000'), +('3224', 'Omdurman', 'SDN', 'Khartum', '1271403'), +('3225', 'Khartum', 'SDN', 'Khartum', '947483'), +('3226', 'Sharq al-Nil', 'SDN', 'Khartum', '700887'), +('3227', 'Port Sudan', 'SDN', 'al-Bahr al-Ahmar', '308195'), +('3228', 'Kassala', 'SDN', 'Kassala', '234622'), +('3229', 'Obeid', 'SDN', 'Kurdufan al-Shamaliy', '229425'), +('3230', 'Nyala', 'SDN', 'Darfur al-Janubiya', '227183'), +('3231', 'Wad Madani', 'SDN', 'al-Jazira', '211362'), +('3232', 'al-Qadarif', 'SDN', 'al-Qadarif', '191164'), +('3233', 'Kusti', 'SDN', 'al-Bahr al-Abyad', '173599'), +('3234', 'al-Fashir', 'SDN', 'Darfur al-Shamaliya', '141884'), +('3235', 'Juba', 'SDN', 'Bahr al-Jabal', '114980'), +('3236', 'Helsinki [Helsingfors]', 'FIN', 'Newmaa', '555474'), +('3237', 'Espoo', 'FIN', 'Newmaa', '213271'), +('3238', 'Tampere', 'FIN', 'Pirkanmaa', '195468'), +('3239', 'Vantaa', 'FIN', 'Newmaa', '178471'), +('3240', 'Turku [Ĺbo]', 'FIN', 'Varsinais-Suomi', '172561'), +('3241', 'Oulu', 'FIN', 'Pohjois-Pohjanmaa', '120753'), +('3242', 'Lahti', 'FIN', 'Päijät-Häme', '96921'), +('3243', 'Paramaribo', 'SUR', 'Paramaribo', '112000'), +('3244', 'Mbabane', 'SWZ', 'Hhohho', '61000'), +('3245', 'Zürich', 'CHE', 'Zürich', '336800'), +('3246', 'Geneve', 'CHE', 'Geneve', '173500'), +('3247', 'Basel', 'CHE', 'Basel-Stadt', '166700'), +('3248', 'Bern', 'CHE', 'Bern', '122700'), +('3249', 'Lausanne', 'CHE', 'Vaud', '114500'), +('3250', 'Damascus', 'SYR', 'Damascus', '1347000'), +('3251', 'Aleppo', 'SYR', 'Aleppo', '1261983'), +('3252', 'Hims', 'SYR', 'Hims', '507404'), +('3253', 'Hama', 'SYR', 'Hama', '343361'), +('3254', 'Latakia', 'SYR', 'Latakia', '264563'), +('3255', 'al-Qamishliya', 'SYR', 'al-Hasaka', '144286'), +('3256', 'Dayr al-Zawr', 'SYR', 'Dayr al-Zawr', '140459'), +('3257', 'Jaramana', 'SYR', 'Damaskos', '138469'), +('3258', 'Duma', 'SYR', 'Damaskos', '131158'), +('3259', 'al-Raqqa', 'SYR', 'al-Raqqa', '108020'), +('3260', 'Idlib', 'SYR', 'Idlib', '91081'), +('3261', 'Dushanbe', 'TJK', 'Karotegin', '524000'), +('3262', 'Khujand', 'TJK', 'Khujand', '161500'), +('3263', 'Taipei', 'TWN', 'Taipei', '2641312'), +('3264', 'Kaohsiung', 'TWN', 'Kaohsiung', '1475505'), +('3265', 'Taichung', 'TWN', 'Taichung', '940589'), +('3266', 'Tainan', 'TWN', 'Tainan', '728060'), +('3267', 'Panchiao', 'TWN', 'Taipei', '523850'), +('3268', 'Chungho', 'TWN', 'Taipei', '392176'), +('3269', 'Keelung (Chilung)', 'TWN', 'Keelung', '385201'), +('3270', 'Sanchung', 'TWN', 'Taipei', '380084'), +('3271', 'Hsinchuang', 'TWN', 'Taipei', '365048'), +('3272', 'Hsinchu', 'TWN', 'Hsinchu', '361958'), +('3273', 'Chungli', 'TWN', 'Taoyuan', '318649'), +('3274', 'Fengshan', 'TWN', 'Kaohsiung', '318562'), +('3275', 'Taoyuan', 'TWN', 'Taoyuan', '316438'), +('3276', 'Chiayi', 'TWN', 'Chiayi', '265109'), +('3277', 'Hsintien', 'TWN', 'Taipei', '263603'), +('3278', 'Changhwa', 'TWN', 'Changhwa', '227715'), +('3279', 'Yungho', 'TWN', 'Taipei', '227700'), +('3280', 'Tucheng', 'TWN', 'Taipei', '224897'), +('3281', 'Pingtung', 'TWN', 'Pingtung', '214727'), +('3282', 'Yungkang', 'TWN', 'Tainan', '193005'), +('3283', 'Pingchen', 'TWN', 'Taoyuan', '188344'), +('3284', 'Tali', 'TWN', 'Taichung', '171940'), +('3285', 'Taiping', 'TWN', '-', '165524'), +('3286', 'Pate', 'TWN', 'Taoyuan', '161700'), +('3287', 'Fengyuan', 'TWN', 'Taichung', '161032'), +('3288', 'Luchou', 'TWN', 'Taipei', '160516'), +('3289', 'Hsichuh', 'TWN', 'Taipei', '154976'), +('3290', 'Shulin', 'TWN', 'Taipei', '151260'), +('3291', 'Yuanlin', 'TWN', 'Changhwa', '126402'), +('3292', 'Yangmei', 'TWN', 'Taoyuan', '126323'), +('3293', 'Taliao', 'TWN', '-', '115897'), +('3294', 'Kueishan', 'TWN', '-', '112195'), +('3295', 'Tanshui', 'TWN', 'Taipei', '111882'), +('3296', 'Taitung', 'TWN', 'Taitung', '111039'), +('3297', 'Hualien', 'TWN', 'Hualien', '108407'), +('3298', 'Nantou', 'TWN', 'Nantou', '104723'), +('3299', 'Lungtan', 'TWN', 'Taipei', '103088'), +('3300', 'Touliu', 'TWN', 'Yünlin', '98900'), +('3301', 'Tsaotun', 'TWN', 'Nantou', '96800'), +('3302', 'Kangshan', 'TWN', 'Kaohsiung', '92200'), +('3303', 'Ilan', 'TWN', 'Ilan', '92000'), +('3304', 'Miaoli', 'TWN', 'Miaoli', '90000'), +('3305', 'Dar es Salaam', 'TZA', 'Dar es Salaam', '1747000'), +('3306', 'Dodoma', 'TZA', 'Dodoma', '189000'), +('3307', 'Mwanza', 'TZA', 'Mwanza', '172300'), +('3308', 'Zanzibar', 'TZA', 'Zanzibar West', '157634'), +('3309', 'Tanga', 'TZA', 'Tanga', '137400'), +('3310', 'Mbeya', 'TZA', 'Mbeya', '130800'), +('3311', 'Morogoro', 'TZA', 'Morogoro', '117800'), +('3312', 'Arusha', 'TZA', 'Arusha', '102500'), +('3313', 'Moshi', 'TZA', 'Kilimanjaro', '96800'), +('3314', 'Tabora', 'TZA', 'Tabora', '92800'), +('3315', 'Křbenhavn', 'DNK', 'Křbenhavn', '495699'), +('3316', 'Ĺrhus', 'DNK', 'Ĺrhus', '284846'), +('3317', 'Odense', 'DNK', 'Fyn', '183912'), +('3318', 'Aalborg', 'DNK', 'Nordjylland', '161161'), +('3319', 'Frederiksberg', 'DNK', 'Frederiksberg', '90327'), +('3320', 'Bangkok', 'THA', 'Bangkok', '6320174'), +('3321', 'Nonthaburi', 'THA', 'Nonthaburi', '292100'), +('3322', 'Nakhon Ratchasima', 'THA', 'Nakhon Ratchasima', '181400'), +('3323', 'Chiang Mai', 'THA', 'Chiang Mai', '171100'), +('3324', 'Udon Thani', 'THA', 'Udon Thani', '158100'), +('3325', 'Hat Yai', 'THA', 'Songkhla', '148632'), +('3326', 'Khon Kaen', 'THA', 'Khon Kaen', '126500'), +('3327', 'Pak Kret', 'THA', 'Nonthaburi', '126055'), +('3328', 'Nakhon Sawan', 'THA', 'Nakhon Sawan', '123800'), +('3329', 'Ubon Ratchathani', 'THA', 'Ubon Ratchathani', '116300'), +('3330', 'Songkhla', 'THA', 'Songkhla', '94900'), +('3331', 'Nakhon Pathom', 'THA', 'Nakhon Pathom', '94100'), +('3332', 'Lomé', 'TGO', 'Maritime', '375000'), +('3333', 'Fakaofo', 'TKL', 'Fakaofo', '300'), +('3334', 'Nuku´alofa', 'TON', 'Tongatapu', '22400'), +('3335', 'Chaguanas', 'TTO', 'Caroni', '56601'), +('3336', 'Port-of-Spain', 'TTO', 'Port-of-Spain', '43396'), +('3337', 'N´Djaména', 'TCD', 'Chari-Baguirmi', '530965'), +('3338', 'Moundou', 'TCD', 'Logone Occidental', '99500'), +('3339', 'Praha', 'CZE', 'Hlavní mesto Praha', '1181126'), +('3340', 'Brno', 'CZE', 'Jizní Morava', '381862'), +('3341', 'Ostrava', 'CZE', 'Severní Morava', '320041'), +('3342', 'Plzen', 'CZE', 'Zapadní Cechy', '166759'), +('3343', 'Olomouc', 'CZE', 'Severní Morava', '102702'), +('3344', 'Liberec', 'CZE', 'Severní Cechy', '99155'), +('3345', 'Ceské Budejovice', 'CZE', 'Jizní Cechy', '98186'), +('3346', 'Hradec Králové', 'CZE', 'Východní Cechy', '98080'), +('3347', 'Ústí nad Labem', 'CZE', 'Severní Cechy', '95491'), +('3348', 'Pardubice', 'CZE', 'Východní Cechy', '91309'), +('3349', 'Tunis', 'TUN', 'Tunis', '690600'), +('3350', 'Sfax', 'TUN', 'Sfax', '257800'), +('3351', 'Ariana', 'TUN', 'Ariana', '197000'), +('3352', 'Ettadhamen', 'TUN', 'Ariana', '178600'), +('3353', 'Sousse', 'TUN', 'Sousse', '145900'), +('3354', 'Kairouan', 'TUN', 'Kairouan', '113100'), +('3355', 'Biserta', 'TUN', 'Biserta', '108900'), +('3356', 'Gabčs', 'TUN', 'Gabčs', '106600'), +('3357', 'Istanbul', 'TUR', 'Istanbul', '8787958'), +('3358', 'Ankara', 'TUR', 'Ankara', '3038159'), +('3359', 'Izmir', 'TUR', 'Izmir', '2130359'), +('3360', 'Adana', 'TUR', 'Adana', '1131198'), +('3361', 'Bursa', 'TUR', 'Bursa', '1095842'), +('3362', 'Gaziantep', 'TUR', 'Gaziantep', '789056'), +('3363', 'Konya', 'TUR', 'Konya', '628364'), +('3364', 'Mersin (Içel)', 'TUR', 'Içel', '587212'), +('3365', 'Antalya', 'TUR', 'Antalya', '564914'), +('3366', 'Diyarbakir', 'TUR', 'Diyarbakir', '479884'), +('3367', 'Kayseri', 'TUR', 'Kayseri', '475657'), +('3368', 'Eskisehir', 'TUR', 'Eskisehir', '470781'), +('3369', 'Sanliurfa', 'TUR', 'Sanliurfa', '405905'), +('3370', 'Samsun', 'TUR', 'Samsun', '339871'), +('3371', 'Malatya', 'TUR', 'Malatya', '330312'), +('3372', 'Gebze', 'TUR', 'Kocaeli', '264170'), +('3373', 'Denizli', 'TUR', 'Denizli', '253848'), +('3374', 'Sivas', 'TUR', 'Sivas', '246642'), +('3375', 'Erzurum', 'TUR', 'Erzurum', '246535'), +('3376', 'Tarsus', 'TUR', 'Adana', '246206'), +('3377', 'Kahramanmaras', 'TUR', 'Kahramanmaras', '245772'), +('3378', 'Elâzig', 'TUR', 'Elâzig', '228815'), +('3379', 'Van', 'TUR', 'Van', '219319'), +('3380', 'Sultanbeyli', 'TUR', 'Istanbul', '211068'), +('3381', 'Izmit (Kocaeli)', 'TUR', 'Kocaeli', '210068'), +('3382', 'Manisa', 'TUR', 'Manisa', '207148'), +('3383', 'Batman', 'TUR', 'Batman', '203793'), +('3384', 'Balikesir', 'TUR', 'Balikesir', '196382'), +('3385', 'Sakarya (Adapazari)', 'TUR', 'Sakarya', '190641'), +('3386', 'Iskenderun', 'TUR', 'Hatay', '153022'), +('3387', 'Osmaniye', 'TUR', 'Osmaniye', '146003'), +('3388', 'Çorum', 'TUR', 'Çorum', '145495'), +('3389', 'Kütahya', 'TUR', 'Kütahya', '144761'), +('3390', 'Hatay (Antakya)', 'TUR', 'Hatay', '143982'), +('3391', 'Kirikkale', 'TUR', 'Kirikkale', '142044'), +('3392', 'Adiyaman', 'TUR', 'Adiyaman', '141529'), +('3393', 'Trabzon', 'TUR', 'Trabzon', '138234'), +('3394', 'Ordu', 'TUR', 'Ordu', '133642'), +('3395', 'Aydin', 'TUR', 'Aydin', '128651'), +('3396', 'Usak', 'TUR', 'Usak', '128162'), +('3397', 'Edirne', 'TUR', 'Edirne', '123383'), +('3398', 'Çorlu', 'TUR', 'Tekirdag', '123300'), +('3399', 'Isparta', 'TUR', 'Isparta', '121911'), +('3400', 'Karabük', 'TUR', 'Karabük', '118285'), +('3401', 'Kilis', 'TUR', 'Kilis', '118245'), +('3402', 'Alanya', 'TUR', 'Antalya', '117300'), +('3403', 'Kiziltepe', 'TUR', 'Mardin', '112000'), +('3404', 'Zonguldak', 'TUR', 'Zonguldak', '111542'), +('3405', 'Siirt', 'TUR', 'Siirt', '107100'), +('3406', 'Viransehir', 'TUR', 'Sanliurfa', '106400'), +('3407', 'Tekirdag', 'TUR', 'Tekirdag', '106077'), +('3408', 'Karaman', 'TUR', 'Karaman', '104200'), +('3409', 'Afyon', 'TUR', 'Afyon', '103984'), +('3410', 'Aksaray', 'TUR', 'Aksaray', '102681'), +('3411', 'Ceyhan', 'TUR', 'Adana', '102412'), +('3412', 'Erzincan', 'TUR', 'Erzincan', '102304'), +('3413', 'Bismil', 'TUR', 'Diyarbakir', '101400'), +('3414', 'Nazilli', 'TUR', 'Aydin', '99900'), +('3415', 'Tokat', 'TUR', 'Tokat', '99500'), +('3416', 'Kars', 'TUR', 'Kars', '93000'), +('3417', 'Inegöl', 'TUR', 'Bursa', '90500'), +('3418', 'Bandirma', 'TUR', 'Balikesir', '90200'), +('3419', 'Ashgabat', 'TKM', 'Ahal', '540600'), +('3420', 'Chärjew', 'TKM', 'Lebap', '189200'), +('3421', 'Dashhowuz', 'TKM', 'Dashhowuz', '141800'), +('3422', 'Mary', 'TKM', 'Mary', '101000'), +('3423', 'Cockburn Town', 'TCA', 'Grand Turk', '4800'), +('3424', 'Funafuti', 'TUV', 'Funafuti', '4600'), +('3425', 'Kampala', 'UGA', 'Central', '890800'), +('3426', 'Kyiv', 'UKR', 'Kiova', '2624000'), +('3427', 'Harkova [Harkiv]', 'UKR', 'Harkova', '1500000'), +('3428', 'Dnipropetrovsk', 'UKR', 'Dnipropetrovsk', '1103000'), +('3429', 'Donetsk', 'UKR', 'Donetsk', '1050000'), +('3430', 'Odesa', 'UKR', 'Odesa', '1011000'), +('3431', 'Zaporizzja', 'UKR', 'Zaporizzja', '848000'), +('3432', 'Lviv', 'UKR', 'Lviv', '788000'), +('3433', 'Kryvyi Rig', 'UKR', 'Dnipropetrovsk', '703000'), +('3434', 'Mykolajiv', 'UKR', 'Mykolajiv', '508000'), +('3435', 'Mariupol', 'UKR', 'Donetsk', '490000'), +('3436', 'Lugansk', 'UKR', 'Lugansk', '469000'), +('3437', 'Vinnytsja', 'UKR', 'Vinnytsja', '391000'), +('3438', 'Makijivka', 'UKR', 'Donetsk', '384000'), +('3439', 'Herson', 'UKR', 'Herson', '353000'), +('3440', 'Sevastopol', 'UKR', 'Krim', '348000'), +('3441', 'Simferopol', 'UKR', 'Krim', '339000'), +('3442', 'Pultava [Poltava]', 'UKR', 'Pultava', '313000'), +('3443', 'Tšernigiv', 'UKR', 'Tšernigiv', '313000'), +('3444', 'Tšerkasy', 'UKR', 'Tšerkasy', '309000'), +('3445', 'Gorlivka', 'UKR', 'Donetsk', '299000'), +('3446', 'Zytomyr', 'UKR', 'Zytomyr', '297000'), +('3447', 'Sumy', 'UKR', 'Sumy', '294000'), +('3448', 'Dniprodzerzynsk', 'UKR', 'Dnipropetrovsk', '270000'), +('3449', 'Kirovograd', 'UKR', 'Kirovograd', '265000'), +('3450', 'Hmelnytskyi', 'UKR', 'Hmelnytskyi', '262000'), +('3451', 'Tšernivtsi', 'UKR', 'Tšernivtsi', '259000'), +('3452', 'Rivne', 'UKR', 'Rivne', '245000'), +('3453', 'Krementšuk', 'UKR', 'Pultava', '239000'), +('3454', 'Ivano-Frankivsk', 'UKR', 'Ivano-Frankivsk', '237000'), +('3455', 'Ternopil', 'UKR', 'Ternopil', '236000'), +('3456', 'Lutsk', 'UKR', 'Volynia', '217000'), +('3457', 'Bila Tserkva', 'UKR', 'Kiova', '215000'), +('3458', 'Kramatorsk', 'UKR', 'Donetsk', '186000'), +('3459', 'Melitopol', 'UKR', 'Zaporizzja', '169000'), +('3460', 'Kertš', 'UKR', 'Krim', '162000'), +('3461', 'Nikopol', 'UKR', 'Dnipropetrovsk', '149000'), +('3462', 'Berdjansk', 'UKR', 'Zaporizzja', '130000'), +('3463', 'Pavlograd', 'UKR', 'Dnipropetrovsk', '127000'), +('3464', 'Sjeverodonetsk', 'UKR', 'Lugansk', '127000'), +('3465', 'Slovjansk', 'UKR', 'Donetsk', '127000'), +('3466', 'Uzgorod', 'UKR', 'Taka-Karpatia', '127000'), +('3467', 'Altševsk', 'UKR', 'Lugansk', '119000'), +('3468', 'Lysytšansk', 'UKR', 'Lugansk', '116000'), +('3469', 'Jevpatorija', 'UKR', 'Krim', '112000'), +('3470', 'Kamjanets-Podilskyi', 'UKR', 'Hmelnytskyi', '109000'), +('3471', 'Jenakijeve', 'UKR', 'Donetsk', '105000'), +('3472', 'Krasnyi Lutš', 'UKR', 'Lugansk', '101000'), +('3473', 'Stahanov', 'UKR', 'Lugansk', '101000'), +('3474', 'Oleksandrija', 'UKR', 'Kirovograd', '99000'), +('3475', 'Konotop', 'UKR', 'Sumy', '96000'), +('3476', 'Kostjantynivka', 'UKR', 'Donetsk', '95000'), +('3477', 'Berdytšiv', 'UKR', 'Zytomyr', '90000'), +('3478', 'Izmajil', 'UKR', 'Odesa', '90000'), +('3479', 'Šostka', 'UKR', 'Sumy', '90000'), +('3480', 'Uman', 'UKR', 'Tšerkasy', '90000'), +('3481', 'Brovary', 'UKR', 'Kiova', '89000'), +('3482', 'Mukatševe', 'UKR', 'Taka-Karpatia', '89000'), +('3483', 'Budapest', 'HUN', 'Budapest', '1811552'), +('3484', 'Debrecen', 'HUN', 'Hajdú-Bihar', '203648'), +('3485', 'Miskolc', 'HUN', 'Borsod-Abaúj-Zemplén', '172357'), +('3486', 'Szeged', 'HUN', 'Csongrád', '158158'), +('3487', 'Pécs', 'HUN', 'Baranya', '157332'), +('3488', 'Györ', 'HUN', 'Györ-Moson-Sopron', '127119'), +('3489', 'Nyiregyháza', 'HUN', 'Szabolcs-Szatmár-Ber', '112419'), +('3490', 'Kecskemét', 'HUN', 'Bács-Kiskun', '105606'), +('3491', 'Székesfehérvár', 'HUN', 'Fejér', '105119'), +('3492', 'Montevideo', 'URY', 'Montevideo', '1236000'), +('3493', 'Nouméa', 'NCL', '–', '76293'), +('3494', 'Auckland', 'NZL', 'Auckland', '381800'), +('3495', 'Christchurch', 'NZL', 'Canterbury', '324200'), +('3496', 'Manukau', 'NZL', 'Auckland', '281800'), +('3497', 'North Shore', 'NZL', 'Auckland', '187700'), +('3498', 'Waitakere', 'NZL', 'Auckland', '170600'), +('3499', 'Wellington', 'NZL', 'Wellington', '166700'), +('3500', 'Dunedin', 'NZL', 'Dunedin', '119600'), +('3501', 'Hamilton', 'NZL', 'Hamilton', '117100'), +('3502', 'Lower Hutt', 'NZL', 'Wellington', '98100'), +('3503', 'Toskent', 'UZB', 'Toskent Shahri', '2117500'), +('3504', 'Namangan', 'UZB', 'Namangan', '370500'), +('3505', 'Samarkand', 'UZB', 'Samarkand', '361800'), +('3506', 'Andijon', 'UZB', 'Andijon', '318600'), +('3507', 'Buhoro', 'UZB', 'Buhoro', '237100'), +('3508', 'Karsi', 'UZB', 'Qashqadaryo', '194100'), +('3509', 'Nukus', 'UZB', 'Karakalpakistan', '194100'), +('3510', 'Kükon', 'UZB', 'Fargona', '190100'), +('3511', 'Fargona', 'UZB', 'Fargona', '180500'), +('3512', 'Circik', 'UZB', 'Toskent', '146400'), +('3513', 'Margilon', 'UZB', 'Fargona', '140800'), +('3514', 'Ürgenc', 'UZB', 'Khorazm', '138900'), +('3515', 'Angren', 'UZB', 'Toskent', '128000'), +('3516', 'Cizah', 'UZB', 'Cizah', '124800'), +('3517', 'Navoi', 'UZB', 'Navoi', '116300'), +('3518', 'Olmalik', 'UZB', 'Toskent', '114900'), +('3519', 'Termiz', 'UZB', 'Surkhondaryo', '109500'), +('3520', 'Minsk', 'BLR', 'Horad Minsk', '1674000'), +('3521', 'Gomel', 'BLR', 'Gomel', '475000'), +('3522', 'Mogiljov', 'BLR', 'Mogiljov', '356000'), +('3523', 'Vitebsk', 'BLR', 'Vitebsk', '340000'), +('3524', 'Grodno', 'BLR', 'Grodno', '302000'), +('3525', 'Brest', 'BLR', 'Brest', '286000'), +('3526', 'Bobruisk', 'BLR', 'Mogiljov', '221000'), +('3527', 'Baranovitši', 'BLR', 'Brest', '167000'), +('3528', 'Borisov', 'BLR', 'Minsk', '151000'), +('3529', 'Pinsk', 'BLR', 'Brest', '130000'), +('3530', 'Orša', 'BLR', 'Vitebsk', '124000'), +('3531', 'Mozyr', 'BLR', 'Gomel', '110000'), +('3532', 'Novopolotsk', 'BLR', 'Vitebsk', '106000'), +('3533', 'Lida', 'BLR', 'Grodno', '101000'), +('3534', 'Soligorsk', 'BLR', 'Minsk', '101000'), +('3535', 'Molodetšno', 'BLR', 'Minsk', '97000'), +('3536', 'Mata-Utu', 'WLF', 'Wallis', '1137'), +('3537', 'Port-Vila', 'VUT', 'Shefa', '33700'), +('3538', 'Cittŕ del Vaticano', 'VAT', '–', '455'), +('3539', 'Caracas', 'VEN', 'Distrito Federal', '1975294'), +('3540', 'Maracaíbo', 'VEN', 'Zulia', '1304776'), +('3541', 'Barquisimeto', 'VEN', 'Lara', '877239'), +('3542', 'Valencia', 'VEN', 'Carabobo', '794246'), +('3543', 'Ciudad Guayana', 'VEN', 'Bolívar', '663713'), +('3544', 'Petare', 'VEN', 'Miranda', '488868'), +('3545', 'Maracay', 'VEN', 'Aragua', '444443'), +('3546', 'Barcelona', 'VEN', 'Anzoátegui', '322267'), +('3547', 'Maturín', 'VEN', 'Monagas', '319726'), +('3548', 'San Cristóbal', 'VEN', 'Táchira', '319373'), +('3549', 'Ciudad Bolívar', 'VEN', 'Bolívar', '301107'), +('3550', 'Cumaná', 'VEN', 'Sucre', '293105'), +('3551', 'Mérida', 'VEN', 'Mérida', '224887'), +('3552', 'Cabimas', 'VEN', 'Zulia', '221329'), +('3553', 'Barinas', 'VEN', 'Barinas', '217831'), +('3554', 'Turmero', 'VEN', 'Aragua', '217499'), +('3555', 'Baruta', 'VEN', 'Miranda', '207290'), +('3556', 'Puerto Cabello', 'VEN', 'Carabobo', '187722'), +('3557', 'Santa Ana de Coro', 'VEN', 'Falcón', '185766'), +('3558', 'Los Teques', 'VEN', 'Miranda', '178784'), +('3559', 'Punto Fijo', 'VEN', 'Falcón', '167215'), +('3560', 'Guarenas', 'VEN', 'Miranda', '165889'), +('3561', 'Acarigua', 'VEN', 'Portuguesa', '158954'), +('3562', 'Puerto La Cruz', 'VEN', 'Anzoátegui', '155700'), +('3563', 'Ciudad Losada', 'VEN', '-', '134501'), +('3564', 'Guacara', 'VEN', 'Carabobo', '131334'), +('3565', 'Valera', 'VEN', 'Trujillo', '130281'), +('3566', 'Guanare', 'VEN', 'Portuguesa', '125621'), +('3567', 'Carúpano', 'VEN', 'Sucre', '119639'), +('3568', 'Catia La Mar', 'VEN', 'Distrito Federal', '117012'), +('3569', 'El Tigre', 'VEN', 'Anzoátegui', '116256'), +('3570', 'Guatire', 'VEN', 'Miranda', '109121'), +('3571', 'Calabozo', 'VEN', 'Guárico', '107146'), +('3572', 'Pozuelos', 'VEN', 'Anzoátegui', '105690'), +('3573', 'Ciudad Ojeda', 'VEN', 'Zulia', '99354'), +('3574', 'Ocumare del Tuy', 'VEN', 'Miranda', '97168'), +('3575', 'Valle de la Pascua', 'VEN', 'Guárico', '95927'), +('3576', 'Araure', 'VEN', 'Portuguesa', '94269'), +('3577', 'San Fernando de Apure', 'VEN', 'Apure', '93809'), +('3578', 'San Felipe', 'VEN', 'Yaracuy', '90940'), +('3579', 'El Limón', 'VEN', 'Aragua', '90000'), +('3580', 'Moscow', 'RUS', 'Moscow (City)', '8389200'), +('3581', 'St Petersburg', 'RUS', 'Pietari', '4694000'), +('3582', 'Novosibirsk', 'RUS', 'Novosibirsk', '1398800'), +('3583', 'Nizni Novgorod', 'RUS', 'Nizni Novgorod', '1357000'), +('3584', 'Jekaterinburg', 'RUS', 'Sverdlovsk', '1266300'), +('3585', 'Samara', 'RUS', 'Samara', '1156100'), +('3586', 'Omsk', 'RUS', 'Omsk', '1148900'), +('3587', 'Kazan', 'RUS', 'Tatarstan', '1101000'), +('3588', 'Ufa', 'RUS', 'Baškortostan', '1091200'), +('3589', 'Tšeljabinsk', 'RUS', 'Tšeljabinsk', '1083200'), +('3590', 'Rostov-na-Donu', 'RUS', 'Rostov-na-Donu', '1012700'), +('3591', 'Perm', 'RUS', 'Perm', '1009700'), +('3592', 'Volgograd', 'RUS', 'Volgograd', '993400'), +('3593', 'Voronez', 'RUS', 'Voronez', '907700'), +('3594', 'Krasnojarsk', 'RUS', 'Krasnojarsk', '875500'), +('3595', 'Saratov', 'RUS', 'Saratov', '874000'), +('3596', 'Toljatti', 'RUS', 'Samara', '722900'), +('3597', 'Uljanovsk', 'RUS', 'Uljanovsk', '667400'), +('3598', 'Izevsk', 'RUS', 'Udmurtia', '652800'), +('3599', 'Krasnodar', 'RUS', 'Krasnodar', '639000'), +('3600', 'Jaroslavl', 'RUS', 'Jaroslavl', '616700'), +('3601', 'Habarovsk', 'RUS', 'Habarovsk', '609400'), +('3602', 'Vladivostok', 'RUS', 'Primorje', '606200'), +('3603', 'Irkutsk', 'RUS', 'Irkutsk', '593700'), +('3604', 'Barnaul', 'RUS', 'Altai', '580100'), +('3605', 'Novokuznetsk', 'RUS', 'Kemerovo', '561600'), +('3606', 'Penza', 'RUS', 'Penza', '532200'), +('3607', 'Rjazan', 'RUS', 'Rjazan', '529900'), +('3608', 'Orenburg', 'RUS', 'Orenburg', '523600'), +('3609', 'Lipetsk', 'RUS', 'Lipetsk', '521000'), +('3610', 'Nabereznyje Tšelny', 'RUS', 'Tatarstan', '514700'), +('3611', 'Tula', 'RUS', 'Tula', '506100'), +('3612', 'Tjumen', 'RUS', 'Tjumen', '503400'), +('3613', 'Kemerovo', 'RUS', 'Kemerovo', '492700'), +('3614', 'Astrahan', 'RUS', 'Astrahan', '486100'), +('3615', 'Tomsk', 'RUS', 'Tomsk', '482100'), +('3616', 'Kirov', 'RUS', 'Kirov', '466200'), +('3617', 'Ivanovo', 'RUS', 'Ivanovo', '459200'), +('3618', 'Tšeboksary', 'RUS', 'Tšuvassia', '459200'), +('3619', 'Brjansk', 'RUS', 'Brjansk', '457400'), +('3620', 'Tver', 'RUS', 'Tver', '454900'), +('3621', 'Kursk', 'RUS', 'Kursk', '443500'), +('3622', 'Magnitogorsk', 'RUS', 'Tšeljabinsk', '427900'), +('3623', 'Kaliningrad', 'RUS', 'Kaliningrad', '424400'), +('3624', 'Nizni Tagil', 'RUS', 'Sverdlovsk', '390900'), +('3625', 'Murmansk', 'RUS', 'Murmansk', '376300'), +('3626', 'Ulan-Ude', 'RUS', 'Burjatia', '370400'), +('3627', 'Kurgan', 'RUS', 'Kurgan', '364700'), +('3628', 'Arkangeli', 'RUS', 'Arkangeli', '361800'), +('3629', 'Sotši', 'RUS', 'Krasnodar', '358600'), +('3630', 'Smolensk', 'RUS', 'Smolensk', '353400'), +('3631', 'Orjol', 'RUS', 'Orjol', '344500'), +('3632', 'Stavropol', 'RUS', 'Stavropol', '343300'), +('3633', 'Belgorod', 'RUS', 'Belgorod', '342000'), +('3634', 'Kaluga', 'RUS', 'Kaluga', '339300'), +('3635', 'Vladimir', 'RUS', 'Vladimir', '337100'), +('3636', 'Mahatškala', 'RUS', 'Dagestan', '332800'), +('3637', 'Tšerepovets', 'RUS', 'Vologda', '324400'), +('3638', 'Saransk', 'RUS', 'Mordva', '314800'), +('3639', 'Tambov', 'RUS', 'Tambov', '312000'), +('3640', 'Vladikavkaz', 'RUS', 'North Ossetia-Alania', '310100'), +('3641', 'Tšita', 'RUS', 'Tšita', '309900'), +('3642', 'Vologda', 'RUS', 'Vologda', '302500'), +('3643', 'Veliki Novgorod', 'RUS', 'Novgorod', '299500'), +('3644', 'Komsomolsk-na-Amure', 'RUS', 'Habarovsk', '291600'), +('3645', 'Kostroma', 'RUS', 'Kostroma', '288100'), +('3646', 'Volzski', 'RUS', 'Volgograd', '286900'), +('3647', 'Taganrog', 'RUS', 'Rostov-na-Donu', '284400'), +('3648', 'Petroskoi', 'RUS', 'Karjala', '282100'), +('3649', 'Bratsk', 'RUS', 'Irkutsk', '277600'), +('3650', 'Dzerzinsk', 'RUS', 'Nizni Novgorod', '277100'), +('3651', 'Surgut', 'RUS', 'Hanti-Mansia', '274900'), +('3652', 'Orsk', 'RUS', 'Orenburg', '273900'), +('3653', 'Sterlitamak', 'RUS', 'Baškortostan', '265200'), +('3654', 'Angarsk', 'RUS', 'Irkutsk', '264700'), +('3655', 'Joškar-Ola', 'RUS', 'Marinmaa', '249200'), +('3656', 'Rybinsk', 'RUS', 'Jaroslavl', '239600'), +('3657', 'Prokopjevsk', 'RUS', 'Kemerovo', '237300'), +('3658', 'Niznevartovsk', 'RUS', 'Hanti-Mansia', '233900'), +('3659', 'Naltšik', 'RUS', 'Kabardi-Balkaria', '233400'), +('3660', 'Syktyvkar', 'RUS', 'Komi', '229700'), +('3661', 'Severodvinsk', 'RUS', 'Arkangeli', '229300'), +('3662', 'Bijsk', 'RUS', 'Altai', '225000'), +('3663', 'Niznekamsk', 'RUS', 'Tatarstan', '223400'), +('3664', 'Blagoveštšensk', 'RUS', 'Amur', '222000'), +('3665', 'Šahty', 'RUS', 'Rostov-na-Donu', '221800'), +('3666', 'Staryi Oskol', 'RUS', 'Belgorod', '213800'), +('3667', 'Zelenograd', 'RUS', 'Moscow (City)', '207100'), +('3668', 'Balakovo', 'RUS', 'Saratov', '206000'), +('3669', 'Novorossijsk', 'RUS', 'Krasnodar', '203300'), +('3670', 'Pihkova', 'RUS', 'Pihkova', '201500'), +('3671', 'Zlatoust', 'RUS', 'Tšeljabinsk', '196900'), +('3672', 'Jakutsk', 'RUS', 'Saha (Jakutia)', '195400'), +('3673', 'Podolsk', 'RUS', 'Moskova', '194300'), +('3674', 'Petropavlovsk-Kamtšatski', 'RUS', 'Kamtšatka', '194100'), +('3675', 'Kamensk-Uralski', 'RUS', 'Sverdlovsk', '190600'), +('3676', 'Engels', 'RUS', 'Saratov', '189000'), +('3677', 'Syzran', 'RUS', 'Samara', '186900'), +('3678', 'Grozny', 'RUS', 'Tšetšenia', '186000'), +('3679', 'Novotšerkassk', 'RUS', 'Rostov-na-Donu', '184400'), +('3680', 'Berezniki', 'RUS', 'Perm', '181900'), +('3681', 'Juzno-Sahalinsk', 'RUS', 'Sahalin', '179200'), +('3682', 'Volgodonsk', 'RUS', 'Rostov-na-Donu', '178200'), +('3683', 'Abakan', 'RUS', 'Hakassia', '169200'), +('3684', 'Maikop', 'RUS', 'Adygea', '167300'), +('3685', 'Miass', 'RUS', 'Tšeljabinsk', '166200'), +('3686', 'Armavir', 'RUS', 'Krasnodar', '164900'), +('3687', 'Ljubertsy', 'RUS', 'Moskova', '163900'), +('3688', 'Rubtsovsk', 'RUS', 'Altai', '162600'), +('3689', 'Kovrov', 'RUS', 'Vladimir', '159900'), +('3690', 'Nahodka', 'RUS', 'Primorje', '157700'), +('3691', 'Ussurijsk', 'RUS', 'Primorje', '157300'), +('3692', 'Salavat', 'RUS', 'Baškortostan', '156800'), +('3693', 'Mytištši', 'RUS', 'Moskova', '155700'), +('3694', 'Kolomna', 'RUS', 'Moskova', '150700'), +('3695', 'Elektrostal', 'RUS', 'Moskova', '147000'), +('3696', 'Murom', 'RUS', 'Vladimir', '142400'), +('3697', 'Kolpino', 'RUS', 'Pietari', '141200'), +('3698', 'Norilsk', 'RUS', 'Krasnojarsk', '140800'), +('3699', 'Almetjevsk', 'RUS', 'Tatarstan', '140700'), +('3700', 'Novomoskovsk', 'RUS', 'Tula', '138100'), +('3701', 'Dimitrovgrad', 'RUS', 'Uljanovsk', '137000'), +('3702', 'Pervouralsk', 'RUS', 'Sverdlovsk', '136100'), +('3703', 'Himki', 'RUS', 'Moskova', '133700'), +('3704', 'Balašiha', 'RUS', 'Moskova', '132900'), +('3705', 'Nevinnomyssk', 'RUS', 'Stavropol', '132600'), +('3706', 'Pjatigorsk', 'RUS', 'Stavropol', '132500'), +('3707', 'Korolev', 'RUS', 'Moskova', '132400'), +('3708', 'Serpuhov', 'RUS', 'Moskova', '132000'), +('3709', 'Odintsovo', 'RUS', 'Moskova', '127400'), +('3710', 'Orehovo-Zujevo', 'RUS', 'Moskova', '124900'), +('3711', 'Kamyšin', 'RUS', 'Volgograd', '124600'), +('3712', 'Novotšeboksarsk', 'RUS', 'Tšuvassia', '123400'), +('3713', 'Tšerkessk', 'RUS', 'Karatšai-Tšerkessia', '121700'), +('3714', 'Atšinsk', 'RUS', 'Krasnojarsk', '121600'), +('3715', 'Magadan', 'RUS', 'Magadan', '121000'), +('3716', 'Mitšurinsk', 'RUS', 'Tambov', '120700'), +('3717', 'Kislovodsk', 'RUS', 'Stavropol', '120400'), +('3718', 'Jelets', 'RUS', 'Lipetsk', '119400'), +('3719', 'Seversk', 'RUS', 'Tomsk', '118600'), +('3720', 'Noginsk', 'RUS', 'Moskova', '117200'), +('3721', 'Velikije Luki', 'RUS', 'Pihkova', '116300'), +('3722', 'Novokuibyševsk', 'RUS', 'Samara', '116200'), +('3723', 'Neftekamsk', 'RUS', 'Baškortostan', '115700'), +('3724', 'Leninsk-Kuznetski', 'RUS', 'Kemerovo', '113800'), +('3725', 'Oktjabrski', 'RUS', 'Baškortostan', '111500'), +('3726', 'Sergijev Posad', 'RUS', 'Moskova', '111100'), +('3727', 'Arzamas', 'RUS', 'Nizni Novgorod', '110700'), +('3728', 'Kiseljovsk', 'RUS', 'Kemerovo', '110000'), +('3729', 'Novotroitsk', 'RUS', 'Orenburg', '109600'), +('3730', 'Obninsk', 'RUS', 'Kaluga', '108300'), +('3731', 'Kansk', 'RUS', 'Krasnojarsk', '107400'), +('3732', 'Glazov', 'RUS', 'Udmurtia', '106300'), +('3733', 'Solikamsk', 'RUS', 'Perm', '106000'), +('3734', 'Sarapul', 'RUS', 'Udmurtia', '105700'), +('3735', 'Ust-Ilimsk', 'RUS', 'Irkutsk', '105200'), +('3736', 'Štšolkovo', 'RUS', 'Moskova', '104900'), +('3737', 'Mezduretšensk', 'RUS', 'Kemerovo', '104400'), +('3738', 'Usolje-Sibirskoje', 'RUS', 'Irkutsk', '103500'), +('3739', 'Elista', 'RUS', 'Kalmykia', '103300'), +('3740', 'Novošahtinsk', 'RUS', 'Rostov-na-Donu', '101900'), +('3741', 'Votkinsk', 'RUS', 'Udmurtia', '101700'), +('3742', 'Kyzyl', 'RUS', 'Tyva', '101100'), +('3743', 'Serov', 'RUS', 'Sverdlovsk', '100400'), +('3744', 'Zelenodolsk', 'RUS', 'Tatarstan', '100200'), +('3745', 'Zeleznodoroznyi', 'RUS', 'Moskova', '100100'), +('3746', 'Kinešma', 'RUS', 'Ivanovo', '100000'), +('3747', 'Kuznetsk', 'RUS', 'Penza', '98200'), +('3748', 'Uhta', 'RUS', 'Komi', '98000'), +('3749', 'Jessentuki', 'RUS', 'Stavropol', '97900'), +('3750', 'Tobolsk', 'RUS', 'Tjumen', '97600'), +('3751', 'Neftejugansk', 'RUS', 'Hanti-Mansia', '97400'), +('3752', 'Bataisk', 'RUS', 'Rostov-na-Donu', '97300'), +('3753', 'Nojabrsk', 'RUS', 'Yamalin Nenetsia', '97300'), +('3754', 'Balašov', 'RUS', 'Saratov', '97100'), +('3755', 'Zeleznogorsk', 'RUS', 'Kursk', '96900'), +('3756', 'Zukovski', 'RUS', 'Moskova', '96500'), +('3757', 'Anzero-Sudzensk', 'RUS', 'Kemerovo', '96100'), +('3758', 'Bugulma', 'RUS', 'Tatarstan', '94100'), +('3759', 'Zeleznogorsk', 'RUS', 'Krasnojarsk', '94000'), +('3760', 'Novouralsk', 'RUS', 'Sverdlovsk', '93300'), +('3761', 'Puškin', 'RUS', 'Pietari', '92900'), +('3762', 'Vorkuta', 'RUS', 'Komi', '92600'), +('3763', 'Derbent', 'RUS', 'Dagestan', '92300'), +('3764', 'Kirovo-Tšepetsk', 'RUS', 'Kirov', '91600'), +('3765', 'Krasnogorsk', 'RUS', 'Moskova', '91000'), +('3766', 'Klin', 'RUS', 'Moskova', '90000'), +('3767', 'Tšaikovski', 'RUS', 'Perm', '90000'), +('3768', 'Novyi Urengoi', 'RUS', 'Yamalin Nenetsia', '89800'), +('3769', 'Ho Chi Minh City', 'VNM', 'Ho Chi Minh City', '3980000'), +('3770', 'Hanoi', 'VNM', 'Hanoi', '1410000'), +('3771', 'Haiphong', 'VNM', 'Haiphong', '783133'), +('3772', 'Da Nang', 'VNM', 'Quang Nam-Da Nang', '382674'), +('3773', 'Bięn Hoa', 'VNM', 'Dong Nai', '282095'), +('3774', 'Nha Trang', 'VNM', 'Khanh Hoa', '221331'), +('3775', 'Hue', 'VNM', 'Thua Thien-Hue', '219149'), +('3776', 'Can Tho', 'VNM', 'Can Tho', '215587'), +('3777', 'Cam Pha', 'VNM', 'Quang Binh', '209086'), +('3778', 'Nam Dinh', 'VNM', 'Nam Ha', '171699'), +('3779', 'Quy Nhon', 'VNM', 'Binh Dinh', '163385'), +('3780', 'Vung Tau', 'VNM', 'Ba Ria-Vung Tau', '145145'), +('3781', 'Rach Gia', 'VNM', 'Kien Giang', '141132'), +('3782', 'Long Xuyen', 'VNM', 'An Giang', '132681'), +('3783', 'Thai Nguyen', 'VNM', 'Bac Thai', '127643'), +('3784', 'Hong Gai', 'VNM', 'Quang Ninh', '127484'), +('3785', 'Phan Thięt', 'VNM', 'Binh Thuan', '114236'), +('3786', 'Cam Ranh', 'VNM', 'Khanh Hoa', '114041'), +('3787', 'Vinh', 'VNM', 'Nghe An', '112455'), +('3788', 'My Tho', 'VNM', 'Tien Giang', '108404'), +('3789', 'Da Lat', 'VNM', 'Lam Dong', '106409'), +('3790', 'Buon Ma Thuot', 'VNM', 'Dac Lac', '97044'), +('3791', 'Tallinn', 'EST', 'Harjumaa', '403981'), +('3792', 'Tartu', 'EST', 'Tartumaa', '101246'), +('3793', 'New York', 'USA', 'New York', '8008278'), +('3794', 'Los Angeles', 'USA', 'California', '3694820'), +('3795', 'Chicago', 'USA', 'Illinois', '2896016'), +('3796', 'Houston', 'USA', 'Texas', '1953631'), +('3797', 'Philadelphia', 'USA', 'Pennsylvania', '1517550'), +('3798', 'Phoenix', 'USA', 'Arizona', '1321045'), +('3799', 'San Diego', 'USA', 'California', '1223400'), +('3800', 'Dallas', 'USA', 'Texas', '1188580'), +('3801', 'San Antonio', 'USA', 'Texas', '1144646'), +('3802', 'Detroit', 'USA', 'Michigan', '951270'), +('3803', 'San Jose', 'USA', 'California', '894943'), +('3804', 'Indianapolis', 'USA', 'Indiana', '791926'), +('3805', 'San Francisco', 'USA', 'California', '776733'), +('3806', 'Jacksonville', 'USA', 'Florida', '735167'), +('3807', 'Columbus', 'USA', 'Ohio', '711470'), +('3808', 'Austin', 'USA', 'Texas', '656562'), +('3809', 'Baltimore', 'USA', 'Maryland', '651154'), +('3810', 'Memphis', 'USA', 'Tennessee', '650100'), +('3811', 'Milwaukee', 'USA', 'Wisconsin', '596974'), +('3812', 'Boston', 'USA', 'Massachusetts', '589141'), +('3813', 'Washington', 'USA', 'District of Columbia', '572059'), +('3814', 'Nashville-Davidson', 'USA', 'Tennessee', '569891'), +('3815', 'El Paso', 'USA', 'Texas', '563662'), +('3816', 'Seattle', 'USA', 'Washington', '563374'), +('3817', 'Denver', 'USA', 'Colorado', '554636'), +('3818', 'Charlotte', 'USA', 'North Carolina', '540828'), +('3819', 'Fort Worth', 'USA', 'Texas', '534694'), +('3820', 'Portland', 'USA', 'Oregon', '529121'), +('3821', 'Oklahoma City', 'USA', 'Oklahoma', '506132'), +('3822', 'Tucson', 'USA', 'Arizona', '486699'), +('3823', 'New Orleans', 'USA', 'Louisiana', '484674'), +('3824', 'Las Vegas', 'USA', 'Nevada', '478434'), +('3825', 'Cleveland', 'USA', 'Ohio', '478403'), +('3826', 'Long Beach', 'USA', 'California', '461522'), +('3827', 'Albuquerque', 'USA', 'New Mexico', '448607'), +('3828', 'Kansas City', 'USA', 'Missouri', '441545'), +('3829', 'Fresno', 'USA', 'California', '427652'), +('3830', 'Virginia Beach', 'USA', 'Virginia', '425257'), +('3831', 'Atlanta', 'USA', 'Georgia', '416474'), +('3832', 'Sacramento', 'USA', 'California', '407018'), +('3833', 'Oakland', 'USA', 'California', '399484'), +('3834', 'Mesa', 'USA', 'Arizona', '396375'), +('3835', 'Tulsa', 'USA', 'Oklahoma', '393049'), +('3836', 'Omaha', 'USA', 'Nebraska', '390007'), +('3837', 'Minneapolis', 'USA', 'Minnesota', '382618'), +('3838', 'Honolulu', 'USA', 'Hawaii', '371657'), +('3839', 'Miami', 'USA', 'Florida', '362470'), +('3840', 'Colorado Springs', 'USA', 'Colorado', '360890'), +('3841', 'Saint Louis', 'USA', 'Missouri', '348189'), +('3842', 'Wichita', 'USA', 'Kansas', '344284'), +('3843', 'Santa Ana', 'USA', 'California', '337977'), +('3844', 'Pittsburgh', 'USA', 'Pennsylvania', '334563'), +('3845', 'Arlington', 'USA', 'Texas', '332969'), +('3846', 'Cincinnati', 'USA', 'Ohio', '331285'), +('3847', 'Anaheim', 'USA', 'California', '328014'), +('3848', 'Toledo', 'USA', 'Ohio', '313619'), +('3849', 'Tampa', 'USA', 'Florida', '303447'), +('3850', 'Buffalo', 'USA', 'New York', '292648'), +('3851', 'Saint Paul', 'USA', 'Minnesota', '287151'), +('3852', 'Corpus Christi', 'USA', 'Texas', '277454'), +('3853', 'Aurora', 'USA', 'Colorado', '276393'), +('3854', 'Raleigh', 'USA', 'North Carolina', '276093'), +('3855', 'Newark', 'USA', 'New Jersey', '273546'), +('3856', 'Lexington-Fayette', 'USA', 'Kentucky', '260512'), +('3857', 'Anchorage', 'USA', 'Alaska', '260283'), +('3858', 'Louisville', 'USA', 'Kentucky', '256231'), +('3859', 'Riverside', 'USA', 'California', '255166'), +('3860', 'Saint Petersburg', 'USA', 'Florida', '248232'), +('3861', 'Bakersfield', 'USA', 'California', '247057'), +('3862', 'Stockton', 'USA', 'California', '243771'), +('3863', 'Birmingham', 'USA', 'Alabama', '242820'), +('3864', 'Jersey City', 'USA', 'New Jersey', '240055'), +('3865', 'Norfolk', 'USA', 'Virginia', '234403'), +('3866', 'Baton Rouge', 'USA', 'Louisiana', '227818'), +('3867', 'Hialeah', 'USA', 'Florida', '226419'), +('3868', 'Lincoln', 'USA', 'Nebraska', '225581'), +('3869', 'Greensboro', 'USA', 'North Carolina', '223891'), +('3870', 'Plano', 'USA', 'Texas', '222030'), +('3871', 'Rochester', 'USA', 'New York', '219773'), +('3872', 'Glendale', 'USA', 'Arizona', '218812'), +('3873', 'Akron', 'USA', 'Ohio', '217074'), +('3874', 'Garland', 'USA', 'Texas', '215768'), +('3875', 'Madison', 'USA', 'Wisconsin', '208054'), +('3876', 'Fort Wayne', 'USA', 'Indiana', '205727'), +('3877', 'Fremont', 'USA', 'California', '203413'), +('3878', 'Scottsdale', 'USA', 'Arizona', '202705'), +('3879', 'Montgomery', 'USA', 'Alabama', '201568'), +('3880', 'Shreveport', 'USA', 'Louisiana', '200145'), +('3881', 'Augusta-Richmond County', 'USA', 'Georgia', '199775'), +('3882', 'Lubbock', 'USA', 'Texas', '199564'), +('3883', 'Chesapeake', 'USA', 'Virginia', '199184'), +('3884', 'Mobile', 'USA', 'Alabama', '198915'), +('3885', 'Des Moines', 'USA', 'Iowa', '198682'), +('3886', 'Grand Rapids', 'USA', 'Michigan', '197800'), +('3887', 'Richmond', 'USA', 'Virginia', '197790'), +('3888', 'Yonkers', 'USA', 'New York', '196086'), +('3889', 'Spokane', 'USA', 'Washington', '195629'), +('3890', 'Glendale', 'USA', 'California', '194973'), +('3891', 'Tacoma', 'USA', 'Washington', '193556'), +('3892', 'Irving', 'USA', 'Texas', '191615'), +('3893', 'Huntington Beach', 'USA', 'California', '189594'), +('3894', 'Modesto', 'USA', 'California', '188856'), +('3895', 'Durham', 'USA', 'North Carolina', '187035'), +('3896', 'Columbus', 'USA', 'Georgia', '186291'), +('3897', 'Orlando', 'USA', 'Florida', '185951'), +('3898', 'Boise City', 'USA', 'Idaho', '185787'), +('3899', 'Winston-Salem', 'USA', 'North Carolina', '185776'), +('3900', 'San Bernardino', 'USA', 'California', '185401'), +('3901', 'Jackson', 'USA', 'Mississippi', '184256'), +('3902', 'Little Rock', 'USA', 'Arkansas', '183133'), +('3903', 'Salt Lake City', 'USA', 'Utah', '181743'), +('3904', 'Reno', 'USA', 'Nevada', '180480'), +('3905', 'Newport News', 'USA', 'Virginia', '180150'), +('3906', 'Chandler', 'USA', 'Arizona', '176581'), +('3907', 'Laredo', 'USA', 'Texas', '176576'), +('3908', 'Henderson', 'USA', 'Nevada', '175381'), +('3909', 'Arlington', 'USA', 'Virginia', '174838'), +('3910', 'Knoxville', 'USA', 'Tennessee', '173890'), +('3911', 'Amarillo', 'USA', 'Texas', '173627'), +('3912', 'Providence', 'USA', 'Rhode Island', '173618'), +('3913', 'Chula Vista', 'USA', 'California', '173556'), +('3914', 'Worcester', 'USA', 'Massachusetts', '172648'), +('3915', 'Oxnard', 'USA', 'California', '170358'), +('3916', 'Dayton', 'USA', 'Ohio', '166179'), +('3917', 'Garden Grove', 'USA', 'California', '165196'), +('3918', 'Oceanside', 'USA', 'California', '161029'), +('3919', 'Tempe', 'USA', 'Arizona', '158625'), +('3920', 'Huntsville', 'USA', 'Alabama', '158216'), +('3921', 'Ontario', 'USA', 'California', '158007'), +('3922', 'Chattanooga', 'USA', 'Tennessee', '155554'), +('3923', 'Fort Lauderdale', 'USA', 'Florida', '152397'), +('3924', 'Springfield', 'USA', 'Massachusetts', '152082'), +('3925', 'Springfield', 'USA', 'Missouri', '151580'), +('3926', 'Santa Clarita', 'USA', 'California', '151088'), +('3927', 'Salinas', 'USA', 'California', '151060'), +('3928', 'Tallahassee', 'USA', 'Florida', '150624'), +('3929', 'Rockford', 'USA', 'Illinois', '150115'), +('3930', 'Pomona', 'USA', 'California', '149473'), +('3931', 'Metairie', 'USA', 'Louisiana', '149428'), +('3932', 'Paterson', 'USA', 'New Jersey', '149222'), +('3933', 'Overland Park', 'USA', 'Kansas', '149080'), +('3934', 'Santa Rosa', 'USA', 'California', '147595'), +('3935', 'Syracuse', 'USA', 'New York', '147306'), +('3936', 'Kansas City', 'USA', 'Kansas', '146866'), +('3937', 'Hampton', 'USA', 'Virginia', '146437'), +('3938', 'Lakewood', 'USA', 'Colorado', '144126'), +('3939', 'Vancouver', 'USA', 'Washington', '143560'), +('3940', 'Irvine', 'USA', 'California', '143072'), +('3941', 'Aurora', 'USA', 'Illinois', '142990'), +('3942', 'Moreno Valley', 'USA', 'California', '142381'), +('3943', 'Pasadena', 'USA', 'California', '141674'), +('3944', 'Hayward', 'USA', 'California', '140030'), +('3945', 'Brownsville', 'USA', 'Texas', '139722'), +('3946', 'Bridgeport', 'USA', 'Connecticut', '139529'), +('3947', 'Hollywood', 'USA', 'Florida', '139357'), +('3948', 'Warren', 'USA', 'Michigan', '138247'), +('3949', 'Torrance', 'USA', 'California', '137946'), +('3950', 'Eugene', 'USA', 'Oregon', '137893'), +('3951', 'Pembroke Pines', 'USA', 'Florida', '137427'), +('3952', 'Salem', 'USA', 'Oregon', '136924'), +('3953', 'Pasadena', 'USA', 'Texas', '133936'), +('3954', 'Escondido', 'USA', 'California', '133559'), +('3955', 'Sunnyvale', 'USA', 'California', '131760'), +('3956', 'Savannah', 'USA', 'Georgia', '131510'), +('3957', 'Fontana', 'USA', 'California', '128929'), +('3958', 'Orange', 'USA', 'California', '128821'), +('3959', 'Naperville', 'USA', 'Illinois', '128358'), +('3960', 'Alexandria', 'USA', 'Virginia', '128283'), +('3961', 'Rancho Cucamonga', 'USA', 'California', '127743'), +('3962', 'Grand Prairie', 'USA', 'Texas', '127427'), +('3963', 'East Los Angeles', 'USA', 'California', '126379'), +('3964', 'Fullerton', 'USA', 'California', '126003'), +('3965', 'Corona', 'USA', 'California', '124966'), +('3966', 'Flint', 'USA', 'Michigan', '124943'), +('3967', 'Paradise', 'USA', 'Nevada', '124682'), +('3968', 'Mesquite', 'USA', 'Texas', '124523'), +('3969', 'Sterling Heights', 'USA', 'Michigan', '124471'), +('3970', 'Sioux Falls', 'USA', 'South Dakota', '123975'), +('3971', 'New Haven', 'USA', 'Connecticut', '123626'), +('3972', 'Topeka', 'USA', 'Kansas', '122377'), +('3973', 'Concord', 'USA', 'California', '121780'), +('3974', 'Evansville', 'USA', 'Indiana', '121582'), +('3975', 'Hartford', 'USA', 'Connecticut', '121578'), +('3976', 'Fayetteville', 'USA', 'North Carolina', '121015'), +('3977', 'Cedar Rapids', 'USA', 'Iowa', '120758'), +('3978', 'Elizabeth', 'USA', 'New Jersey', '120568'), +('3979', 'Lansing', 'USA', 'Michigan', '119128'), +('3980', 'Lancaster', 'USA', 'California', '118718'), +('3981', 'Fort Collins', 'USA', 'Colorado', '118652'), +('3982', 'Coral Springs', 'USA', 'Florida', '117549'), +('3983', 'Stamford', 'USA', 'Connecticut', '117083'), +('3984', 'Thousand Oaks', 'USA', 'California', '117005'), +('3985', 'Vallejo', 'USA', 'California', '116760'), +('3986', 'Palmdale', 'USA', 'California', '116670'), +('3987', 'Columbia', 'USA', 'South Carolina', '116278'), +('3988', 'El Monte', 'USA', 'California', '115965'), +('3989', 'Abilene', 'USA', 'Texas', '115930'), +('3990', 'North Las Vegas', 'USA', 'Nevada', '115488'), +('3991', 'Ann Arbor', 'USA', 'Michigan', '114024'), +('3992', 'Beaumont', 'USA', 'Texas', '113866'), +('3993', 'Waco', 'USA', 'Texas', '113726'), +('3994', 'Macon', 'USA', 'Georgia', '113336'), +('3995', 'Independence', 'USA', 'Missouri', '113288'), +('3996', 'Peoria', 'USA', 'Illinois', '112936'), +('3997', 'Inglewood', 'USA', 'California', '112580'), +('3998', 'Springfield', 'USA', 'Illinois', '111454'), +('3999', 'Simi Valley', 'USA', 'California', '111351'), +('4000', 'Lafayette', 'USA', 'Louisiana', '110257'), +('4001', 'Gilbert', 'USA', 'Arizona', '109697'), +('4002', 'Carrollton', 'USA', 'Texas', '109576'), +('4003', 'Bellevue', 'USA', 'Washington', '109569'), +('4004', 'West Valley City', 'USA', 'Utah', '108896'), +('4005', 'Clarksville', 'USA', 'Tennessee', '108787'), +('4006', 'Costa Mesa', 'USA', 'California', '108724'), +('4007', 'Peoria', 'USA', 'Arizona', '108364'), +('4008', 'South Bend', 'USA', 'Indiana', '107789'), +('4009', 'Downey', 'USA', 'California', '107323'), +('4010', 'Waterbury', 'USA', 'Connecticut', '107271'), +('4011', 'Manchester', 'USA', 'New Hampshire', '107006'), +('4012', 'Allentown', 'USA', 'Pennsylvania', '106632'), +('4013', 'McAllen', 'USA', 'Texas', '106414'), +('4014', 'Joliet', 'USA', 'Illinois', '106221'), +('4015', 'Lowell', 'USA', 'Massachusetts', '105167'), +('4016', 'Provo', 'USA', 'Utah', '105166'), +('4017', 'West Covina', 'USA', 'California', '105080'), +('4018', 'Wichita Falls', 'USA', 'Texas', '104197'), +('4019', 'Erie', 'USA', 'Pennsylvania', '103717'), +('4020', 'Daly City', 'USA', 'California', '103621'), +('4021', 'Citrus Heights', 'USA', 'California', '103455'), +('4022', 'Norwalk', 'USA', 'California', '103298'), +('4023', 'Gary', 'USA', 'Indiana', '102746'), +('4024', 'Berkeley', 'USA', 'California', '102743'), +('4025', 'Santa Clara', 'USA', 'California', '102361'), +('4026', 'Green Bay', 'USA', 'Wisconsin', '102313'), +('4027', 'Cape Coral', 'USA', 'Florida', '102286'), +('4028', 'Arvada', 'USA', 'Colorado', '102153'), +('4029', 'Pueblo', 'USA', 'Colorado', '102121'), +('4030', 'Sandy', 'USA', 'Utah', '101853'), +('4031', 'Athens-Clarke County', 'USA', 'Georgia', '101489'), +('4032', 'Cambridge', 'USA', 'Massachusetts', '101355'), +('4033', 'Westminster', 'USA', 'Colorado', '100940'), +('4034', 'San Buenaventura', 'USA', 'California', '100916'), +('4035', 'Portsmouth', 'USA', 'Virginia', '100565'), +('4036', 'Livonia', 'USA', 'Michigan', '100545'), +('4037', 'Burbank', 'USA', 'California', '100316'), +('4038', 'Clearwater', 'USA', 'Florida', '99936'), +('4039', 'Midland', 'USA', 'Texas', '98293'), +('4040', 'Davenport', 'USA', 'Iowa', '98256'), +('4041', 'Mission Viejo', 'USA', 'California', '98049'), +('4042', 'Miami Beach', 'USA', 'Florida', '97855'), +('4043', 'Sunrise Manor', 'USA', 'Nevada', '95362'), +('4044', 'New Bedford', 'USA', 'Massachusetts', '94780'), +('4045', 'El Cajon', 'USA', 'California', '94578'), +('4046', 'Norman', 'USA', 'Oklahoma', '94193'), +('4047', 'Richmond', 'USA', 'California', '94100'), +('4048', 'Albany', 'USA', 'New York', '93994'), +('4049', 'Brockton', 'USA', 'Massachusetts', '93653'), +('4050', 'Roanoke', 'USA', 'Virginia', '93357'), +('4051', 'Billings', 'USA', 'Montana', '92988'), +('4052', 'Compton', 'USA', 'California', '92864'), +('4053', 'Gainesville', 'USA', 'Florida', '92291'), +('4054', 'Fairfield', 'USA', 'California', '92256'), +('4055', 'Arden-Arcade', 'USA', 'California', '92040'), +('4056', 'San Mateo', 'USA', 'California', '91799'), +('4057', 'Visalia', 'USA', 'California', '91762'), +('4058', 'Boulder', 'USA', 'Colorado', '91238'), +('4059', 'Cary', 'USA', 'North Carolina', '91213'), +('4060', 'Santa Monica', 'USA', 'California', '91084'), +('4061', 'Fall River', 'USA', 'Massachusetts', '90555'), +('4062', 'Kenosha', 'USA', 'Wisconsin', '89447'), +('4063', 'Elgin', 'USA', 'Illinois', '89408'), +('4064', 'Odessa', 'USA', 'Texas', '89293'), +('4065', 'Carson', 'USA', 'California', '89089'), +('4066', 'Charleston', 'USA', 'South Carolina', '89063'), +('4067', 'Charlotte Amalie', 'VIR', 'St Thomas', '13000'), +('4068', 'Harare', 'ZWE', 'Harare', '1410000'), +('4069', 'Bulawayo', 'ZWE', 'Bulawayo', '621742'), +('4070', 'Chitungwiza', 'ZWE', 'Harare', '274912'), +('4071', 'Mount Darwin', 'ZWE', 'Harare', '164362'), +('4072', 'Mutare', 'ZWE', 'Manicaland', '131367'), +('4073', 'Gweru', 'ZWE', 'Midlands', '128037'), +('4074', 'Gaza', 'PSE', 'Gaza', '353632'), +('4075', 'Khan Yunis', 'PSE', 'Khan Yunis', '123175'), +('4076', 'Hebron', 'PSE', 'Hebron', '119401'), +('4077', 'Jabaliya', 'PSE', 'North Gaza', '113901'), +('4078', 'Nablus', 'PSE', 'Nablus', '100231'), +('4079', 'Rafah', 'PSE', 'Rafah', '92020'); + +-- +-- Data for Name: country; Type: TABLE DATA; Schema: public; Owner: chriskl +-- + +INSERT INTO country (code, name, continent, region, surfacearea, indepyear, population, lifeexpectancy, gnp, gnpold, localname, governmentform, headofstate, capital, code2) VALUES +('AFG', 'Afghanistan', 'Asia', 'Southern and Central Asia', '652090', '1919', '22720000', '45.900002', '5976.00', '', 'Afganistan/Afqanestan', 'Islamic Emirate', 'Mohammad Omar', '1', 'AF'), +('NLD', 'Netherlands', 'Europe', 'Western Europe', '41526', '1581', '15864000', '78.300003', '371362.00', '360478.00', 'Nederland', 'Constitutional Monarchy', 'Beatrix', '5', 'NL'), +('ANT', 'Netherlands Antilles', 'North America', 'Caribbean', '800', '', '217000', '74.699997', '1941.00', '', 'Nederlandse Antillen', 'Nonmetropolitan Territory of The Netherlands', 'Beatrix', '33', 'AN'), +('ALB', 'Albania', 'Europe', 'Southern Europe', '28748', '1912', '3401200', '71.599998', '3205.00', '2500.00', 'Shqipëria', 'Republic', 'Rexhep Mejdani', '34', 'AL'), +('DZA', 'Algeria', 'Africa', 'Northern Africa', '2381741', '1962', '31471000', '69.699997', '49982.00', '46966.00', 'Al-Jaza’ir/Algérie', 'Republic', 'Abdelaziz Bouteflika', '35', 'DZ'), +('ASM', 'American Samoa', 'Oceania', 'Polynesia', '199', '', '68000', '75.099998', '334.00', '', 'Amerika Samoa', 'US Territory', 'George W. Bush', '54', 'AS'), +('AND', 'Andorra', 'Europe', 'Southern Europe', '468', '1278', '78000', '83.5', '1630.00', '', 'Andorra', 'Parliamentary Coprincipality', '', '55', 'AD'), +('AGO', 'Angola', 'Africa', 'Central Africa', '1246700', '1975', '12878000', '38.299999', '6648.00', '7984.00', 'Angola', 'Republic', 'José Eduardo dos Santos', '56', 'AO'), +('AIA', 'Anguilla', 'North America', 'Caribbean', '96', '', '8000', '76.099998', '63.20', '', 'Anguilla', 'Dependent Territory of the UK', 'Elisabeth II', '62', 'AI'), +('ATG', 'Antigua and Barbuda', 'North America', 'Caribbean', '442', '1981', '68000', '70.5', '612.00', '584.00', 'Antigua and Barbuda', 'Constitutional Monarchy', 'Elisabeth II', '63', 'AG'), +('ARE', 'United Arab Emirates', 'Asia', 'Middle East', '83600', '1971', '2441000', '74.099998', '37966.00', '36846.00', 'Al-Imarat al-´Arabiya al-Muttahida', 'Emirate Federation', 'Zayid bin Sultan al-Nahayan', '65', 'AE'), +('ARG', 'Argentina', 'South America', 'South America', '2780400', '1816', '37032000', '75.099998', '340238.00', '323310.00', 'Argentina', 'Federal Republic', 'Fernando de la Rúa', '69', 'AR'), +('ARM', 'Armenia', 'Asia', 'Middle East', '29800', '1991', '3520000', '66.400002', '1813.00', '1627.00', 'Hajastan', 'Republic', 'Robert Kotšarjan', '126', 'AM'), +('ABW', 'Aruba', 'North America', 'Caribbean', '193', '', '103000', '78.400002', '828.00', '793.00', 'Aruba', 'Nonmetropolitan Territory of The Netherlands', 'Beatrix', '129', 'AW'), +('AUS', 'Australia', 'Oceania', 'Australia and New Zealand', '7741220', '1901', '18886000', '79.800003', '351182.00', '392911.00', 'Australia', 'Constitutional Monarchy, Federation', 'Elisabeth II', '135', 'AU'), +('AZE', 'Azerbaijan', 'Asia', 'Middle East', '86600', '1991', '7734000', '62.900002', '4127.00', '4100.00', 'Azärbaycan', 'Federal Republic', 'Heydär Äliyev', '144', 'AZ'), +('BHS', 'Bahamas', 'North America', 'Caribbean', '13878', '1973', '307000', '71.099998', '3527.00', '3347.00', 'The Bahamas', 'Constitutional Monarchy', 'Elisabeth II', '148', 'BS'), +('BHR', 'Bahrain', 'Asia', 'Middle East', '694', '1971', '617000', '73', '6366.00', '6097.00', 'Al-Bahrayn', 'Monarchy (Emirate)', 'Hamad ibn Isa al-Khalifa', '149', 'BH'), +('BGD', 'Bangladesh', 'Asia', 'Southern and Central Asia', '143998', '1971', '129155000', '60.200001', '32852.00', '31966.00', 'Bangladesh', 'Republic', 'Shahabuddin Ahmad', '150', 'BD'), +('BRB', 'Barbados', 'North America', 'Caribbean', '430', '1966', '270000', '73', '2223.00', '2186.00', 'Barbados', 'Constitutional Monarchy', 'Elisabeth II', '174', 'BB'), +('BEL', 'Belgium', 'Europe', 'Western Europe', '30518', '1830', '10239000', '77.800003', '249704.00', '243948.00', 'België/Belgique', 'Constitutional Monarchy, Federation', 'Albert II', '179', 'BE'), +('BLZ', 'Belize', 'North America', 'Central America', '22696', '1981', '241000', '70.900002', '630.00', '616.00', 'Belize', 'Constitutional Monarchy', 'Elisabeth II', '185', 'BZ'), +('BEN', 'Benin', 'Africa', 'Western Africa', '112622', '1960', '6097000', '50.200001', '2357.00', '2141.00', 'Bénin', 'Republic', 'Mathieu Kérékou', '187', 'BJ'), +('BMU', 'Bermuda', 'North America', 'North America', '53', '', '65000', '76.900002', '2328.00', '2190.00', 'Bermuda', 'Dependent Territory of the UK', 'Elisabeth II', '191', 'BM'), +('BTN', 'Bhutan', 'Asia', 'Southern and Central Asia', '47000', '1910', '2124000', '52.400002', '372.00', '383.00', 'Druk-Yul', 'Monarchy', 'Jigme Singye Wangchuk', '192', 'BT'), +('BOL', 'Bolivia', 'South America', 'South America', '1098581', '1825', '8329000', '63.700001', '8571.00', '7967.00', 'Bolivia', 'Republic', 'Hugo Bánzer Suárez', '194', 'BO'), +('BIH', 'Bosnia and Herzegovina', 'Europe', 'Southern Europe', '51197', '1992', '3972000', '71.5', '2841.00', '', 'Bosna i Hercegovina', 'Federal Republic', 'Ante Jelavic', '201', 'BA'), +('BWA', 'Botswana', 'Africa', 'Southern Africa', '581730', '1966', '1622000', '39.299999', '4834.00', '4935.00', 'Botswana', 'Republic', 'Festus G. Mogae', '204', 'BW'), +('BRA', 'Brazil', 'South America', 'South America', '8547403', '1822', '170115000', '62.900002', '776739.00', '804108.00', 'Brasil', 'Federal Republic', 'Fernando Henrique Cardoso', '211', 'BR'), +('GBR', 'United Kingdom', 'Europe', 'British Islands', '242900', '1066', '59623400', '77.699997', '1378330.00', '1296830.00', 'United Kingdom', 'Constitutional Monarchy', 'Elisabeth II', '456', 'GB'), +('VGB', 'Virgin Islands, British', 'North America', 'Caribbean', '151', '', '21000', '75.400002', '612.00', '573.00', 'British Virgin Islands', 'Dependent Territory of the UK', 'Elisabeth II', '537', 'VG'), +('BRN', 'Brunei', 'Asia', 'Southeast Asia', '5765', '1984', '328000', '73.599998', '11705.00', '12460.00', 'Brunei Darussalam', 'Monarchy (Sultanate)', 'Haji Hassan al-Bolkiah', '538', 'BN'), +('BGR', 'Bulgaria', 'Europe', 'Eastern Europe', '110994', '1908', '8190900', '70.900002', '12178.00', '10169.00', 'Balgarija', 'Republic', 'Petar Stojanov', '539', 'BG'), +('BFA', 'Burkina Faso', 'Africa', 'Western Africa', '274000', '1960', '11937000', '46.700001', '2425.00', '2201.00', 'Burkina Faso', 'Republic', 'Blaise Compaoré', '549', 'BF'), +('BDI', 'Burundi', 'Africa', 'Eastern Africa', '27834', '1962', '6695000', '46.200001', '903.00', '982.00', 'Burundi/Uburundi', 'Republic', 'Pierre Buyoya', '552', 'BI'), +('CYM', 'Cayman Islands', 'North America', 'Caribbean', '264', '', '38000', '78.900002', '1263.00', '1186.00', 'Cayman Islands', 'Dependent Territory of the UK', 'Elisabeth II', '553', 'KY'), +('CHL', 'Chile', 'South America', 'South America', '756626', '1810', '15211000', '75.699997', '72949.00', '75780.00', 'Chile', 'Republic', 'Ricardo Lagos Escobar', '554', 'CL'), +('COK', 'Cook Islands', 'Oceania', 'Polynesia', '236', '', '20000', '71.099998', '100.00', '', 'The Cook Islands', 'Nonmetropolitan Territory of New Zealand', 'Elisabeth II', '583', 'CK'), +('CRI', 'Costa Rica', 'North America', 'Central America', '51100', '1821', '4023000', '75.800003', '10226.00', '9757.00', 'Costa Rica', 'Republic', 'Miguel Ángel Rodríguez Echeverría', '584', 'CR'), +('DJI', 'Djibouti', 'Africa', 'Eastern Africa', '23200', '1977', '638000', '50.799999', '382.00', '373.00', 'Djibouti/Jibuti', 'Republic', 'Ismail Omar Guelleh', '585', 'DJ'), +('DMA', 'Dominica', 'North America', 'Caribbean', '751', '1978', '71000', '73.400002', '256.00', '243.00', 'Dominica', 'Republic', 'Vernon Shaw', '586', 'DM'), +('DOM', 'Dominican Republic', 'North America', 'Caribbean', '48511', '1844', '8495000', '73.199997', '15846.00', '15076.00', 'República Dominicana', 'Republic', 'Hipólito Mejía Domínguez', '587', 'DO'), +('ECU', 'Ecuador', 'South America', 'South America', '283561', '1822', '12646000', '71.099998', '19770.00', '19769.00', 'Ecuador', 'Republic', 'Gustavo Noboa Bejarano', '594', 'EC'), +('EGY', 'Egypt', 'Africa', 'Northern Africa', '1001449', '1922', '68470000', '63.299999', '82710.00', '75617.00', 'Misr', 'Republic', 'Hosni Mubarak', '608', 'EG'), +('SLV', 'El Salvador', 'North America', 'Central America', '21041', '1841', '6276000', '69.699997', '11863.00', '11203.00', 'El Salvador', 'Republic', 'Francisco Guillermo Flores Pérez', '645', 'SV'), +('ERI', 'Eritrea', 'Africa', 'Eastern Africa', '117600', '1993', '3850000', '55.799999', '650.00', '755.00', 'Ertra', 'Republic', 'Isayas Afewerki [Isaias Afwerki]', '652', 'ER'), +('ESP', 'Spain', 'Europe', 'Southern Europe', '505992', '1492', '39441700', '78.800003', '553233.00', '532031.00', 'Espańa', 'Constitutional Monarchy', 'Juan Carlos I', '653', 'ES'), +('ZAF', 'South Africa', 'Africa', 'Southern Africa', '1221037', '1910', '40377000', '51.099998', '116729.00', '129092.00', 'South Africa', 'Republic', 'Thabo Mbeki', '716', 'ZA'), +('ETH', 'Ethiopia', 'Africa', 'Eastern Africa', '1104300', '-1000', '62565000', '45.200001', '6353.00', '6180.00', 'YeItyop´iya', 'Republic', 'Negasso Gidada', '756', 'ET'), +('FLK', 'Falkland Islands', 'South America', 'South America', '12173', '', '2000', '', '0.00', '', 'Falkland Islands', 'Dependent Territory of the UK', 'Elisabeth II', '763', 'FK'), +('FJI', 'Fiji Islands', 'Oceania', 'Melanesia', '18274', '1970', '817000', '67.900002', '1536.00', '2149.00', 'Fiji Islands', 'Republic', 'Josefa Iloilo', '764', 'FJ'), +('PHL', 'Philippines', 'Asia', 'Southeast Asia', '300000', '1946', '75967000', '67.5', '65107.00', '82239.00', 'Pilipinas', 'Republic', 'Gloria Macapagal-Arroyo', '766', 'PH'), +('FRO', 'Faroe Islands', 'Europe', 'Nordic Countries', '1399', '', '43000', '78.400002', '0.00', '', 'Fřroyar', 'Part of Denmark', 'Margrethe II', '901', 'FO'), +('GAB', 'Gabon', 'Africa', 'Central Africa', '267668', '1960', '1226000', '50.099998', '5493.00', '5279.00', 'Le Gabon', 'Republic', 'Omar Bongo', '902', 'GA'), +('GMB', 'Gambia', 'Africa', 'Western Africa', '11295', '1965', '1305000', '53.200001', '320.00', '325.00', 'The Gambia', 'Republic', 'Yahya Jammeh', '904', 'GM'), +('GEO', 'Georgia', 'Asia', 'Middle East', '69700', '1991', '4968000', '64.5', '6064.00', '5924.00', 'Sakartvelo', 'Republic', 'Eduard Ševardnadze', '905', 'GE'), +('GHA', 'Ghana', 'Africa', 'Western Africa', '238533', '1957', '20212000', '57.400002', '7137.00', '6884.00', 'Ghana', 'Republic', 'John Kufuor', '910', 'GH'), +('GIB', 'Gibraltar', 'Europe', 'Southern Europe', '6', '', '25000', '79', '258.00', '', 'Gibraltar', 'Dependent Territory of the UK', 'Elisabeth II', '915', 'GI'), +('GRD', 'Grenada', 'North America', 'Caribbean', '344', '1974', '94000', '64.5', '318.00', '', 'Grenada', 'Constitutional Monarchy', 'Elisabeth II', '916', 'GD'), +('GRL', 'Greenland', 'North America', 'North America', '2166090', '', '56000', '68.099998', '0.00', '', 'Kalaallit Nunaat/Grřnland', 'Part of Denmark', 'Margrethe II', '917', 'GL'), +('GLP', 'Guadeloupe', 'North America', 'Caribbean', '1705', '', '456000', '77', '3501.00', '', 'Guadeloupe', 'Overseas Department of France', 'Jacques Chirac', '919', 'GP'), +('GUM', 'Guam', 'Oceania', 'Micronesia', '549', '', '168000', '77.800003', '1197.00', '1136.00', 'Guam', 'US Territory', 'George W. Bush', '921', 'GU'), +('GTM', 'Guatemala', 'North America', 'Central America', '108889', '1821', '11385000', '66.199997', '19008.00', '17797.00', 'Guatemala', 'Republic', 'Alfonso Portillo Cabrera', '922', 'GT'), +('GIN', 'Guinea', 'Africa', 'Western Africa', '245857', '1958', '7430000', '45.599998', '2352.00', '2383.00', 'Guinée', 'Republic', 'Lansana Conté', '926', 'GN'), +('GNB', 'Guinea-Bissau', 'Africa', 'Western Africa', '36125', '1974', '1213000', '49', '293.00', '272.00', 'Guiné-Bissau', 'Republic', 'Kumba Ialá', '927', 'GW'), +('GUY', 'Guyana', 'South America', 'South America', '214969', '1966', '861000', '64', '722.00', '743.00', 'Guyana', 'Republic', 'Bharrat Jagdeo', '928', 'GY'), +('HTI', 'Haiti', 'North America', 'Caribbean', '27750', '1804', '8222000', '49.200001', '3459.00', '3107.00', 'Haďti/Dayti', 'Republic', 'Jean-Bertrand Aristide', '929', 'HT'), +('HND', 'Honduras', 'North America', 'Central America', '112088', '1838', '6485000', '69.900002', '5333.00', '4697.00', 'Honduras', 'Republic', 'Carlos Roberto Flores Facussé', '933', 'HN'), +('HKG', 'Hong Kong', 'Asia', 'Eastern Asia', '1075', '', '6782000', '79.5', '166448.00', '173610.00', 'Xianggang/Hong Kong', 'Special Administrative Region of China', 'Jiang Zemin', '937', 'HK'), +('SJM', 'Svalbard and Jan Mayen', 'Europe', 'Nordic Countries', '62422', '', '3200', '', '0.00', '', 'Svalbard og Jan Mayen', 'Dependent Territory of Norway', 'Harald V', '938', 'SJ'), +('IDN', 'Indonesia', 'Asia', 'Southeast Asia', '1904569', '1945', '212107000', '68', '84982.00', '215002.00', 'Indonesia', 'Republic', 'Abdurrahman Wahid', '939', 'ID'), +('IND', 'India', 'Asia', 'Southern and Central Asia', '3287263', '1947', '1013662000', '62.5', '447114.00', '430572.00', 'Bharat/India', 'Federal Republic', 'Kocheril Raman Narayanan', '1109', 'IN'), +('IRQ', 'Iraq', 'Asia', 'Middle East', '438317', '1932', '23115000', '66.5', '11500.00', '', 'Al-´Iraq', 'Republic', 'Saddam Hussein al-Takriti', '1365', 'IQ'), +('IRN', 'Iran', 'Asia', 'Southern and Central Asia', '1648195', '1906', '67702000', '69.699997', '195746.00', '160151.00', 'Iran', 'Islamic Republic', 'Ali Mohammad Khatami-Ardakani', '1380', 'IR'), +('IRL', 'Ireland', 'Europe', 'British Islands', '70273', '1921', '3775100', '76.800003', '75921.00', '73132.00', 'Ireland/Éire', 'Republic', 'Mary McAleese', '1447', 'IE'), +('ISL', 'Iceland', 'Europe', 'Nordic Countries', '103000', '1944', '279000', '79.400002', '8255.00', '7474.00', 'Ísland', 'Republic', 'Ólafur Ragnar Grímsson', '1449', 'IS'), +('ISR', 'Israel', 'Asia', 'Middle East', '21056', '1948', '6217000', '78.599998', '97477.00', '98577.00', 'Yisra’el/Isra’il', 'Republic', 'Moshe Katzav', '1450', 'IL'), +('ITA', 'Italy', 'Europe', 'Southern Europe', '301316', '1861', '57680000', '79', '1161755.00', '1145372.00', 'Italia', 'Republic', 'Carlo Azeglio Ciampi', '1464', 'IT'), +('TMP', 'East Timor', 'Asia', 'Southeast Asia', '14874', '', '885000', '46', '0.00', '', 'Timor Timur', 'Administrated by the UN', 'José Alexandre Gusmăo', '1522', 'TP'), +('AUT', 'Austria', 'Europe', 'Western Europe', '83859', '1918', '8091800', '77.699997', '211860.00', '206025.00', 'Österreich', 'Federal Republic', 'Thomas Klestil', '1523', 'AT'), +('JAM', 'Jamaica', 'North America', 'Caribbean', '10990', '1962', '2583000', '75.199997', '6871.00', '6722.00', 'Jamaica', 'Constitutional Monarchy', 'Elisabeth II', '1530', 'JM'), +('JPN', 'Japan', 'Asia', 'Eastern Asia', '377829', '-660', '126714000', '80.699997', '3787042.00', '4192638.00', 'Nihon/Nippon', 'Constitutional Monarchy', 'Akihito', '1532', 'JP'), +('YEM', 'Yemen', 'Asia', 'Middle East', '527968', '1918', '18112000', '59.799999', '6041.00', '5729.00', 'Al-Yaman', 'Republic', 'Ali Abdallah Salih', '1780', 'YE'), +('JOR', 'Jordan', 'Asia', 'Middle East', '88946', '1946', '5083000', '77.400002', '7526.00', '7051.00', 'Al-Urdunn', 'Constitutional Monarchy', 'Abdullah II', '1786', 'JO'), +('CXR', 'Christmas Island', 'Oceania', 'Australia and New Zealand', '135', '', '2500', '', '0.00', '', 'Christmas Island', 'Territory of Australia', 'Elisabeth II', '1791', 'CX'), +('YUG', 'Yugoslavia', 'Europe', 'Southern Europe', '102173', '1918', '10640000', '72.400002', '17000.00', '', 'Jugoslavija', 'Federal Republic', 'Vojislav Koštunica', '1792', 'YU'), +('KHM', 'Cambodia', 'Asia', 'Southeast Asia', '181035', '1953', '11168000', '56.5', '5121.00', '5670.00', 'Kâmpuchéa', 'Constitutional Monarchy', 'Norodom Sihanouk', '1800', 'KH'), +('CMR', 'Cameroon', 'Africa', 'Central Africa', '475442', '1960', '15085000', '54.799999', '9174.00', '8596.00', 'Cameroun/Cameroon', 'Republic', 'Paul Biya', '1804', 'CM'), +('CAN', 'Canada', 'North America', 'North America', '9970610', '1867', '31147000', '79.400002', '598862.00', '625626.00', 'Canada', 'Constitutional Monarchy, Federation', 'Elisabeth II', '1822', 'CA'), +('CPV', 'Cape Verde', 'Africa', 'Western Africa', '4033', '1975', '428000', '68.900002', '435.00', '420.00', 'Cabo Verde', 'Republic', 'António Mascarenhas Monteiro', '1859', 'CV'), +('KAZ', 'Kazakstan', 'Asia', 'Southern and Central Asia', '2724900', '1991', '16223000', '63.200001', '24375.00', '23383.00', 'Qazaqstan', 'Republic', 'Nursultan Nazarbajev', '1864', 'KZ'), +('KEN', 'Kenya', 'Africa', 'Eastern Africa', '580367', '1963', '30080000', '48', '9217.00', '10241.00', 'Kenya', 'Republic', 'Daniel arap Moi', '1881', 'KE'), +('CAF', 'Central African Republic', 'Africa', 'Central Africa', '622984', '1960', '3615000', '44', '1054.00', '993.00', 'Centrafrique/Bę-Afrîka', 'Republic', 'Ange-Félix Patassé', '1889', 'CF'), +('CHN', 'China', 'Asia', 'Eastern Asia', '9572900', '-1523', '1277558000', '71.400002', '982268.00', '917719.00', 'Zhongquo', 'People''sRepublic', 'Jiang Zemin', '1891', 'CN'), +('KGZ', 'Kyrgyzstan', 'Asia', 'Southern and Central Asia', '199900', '1991', '4699000', '63.400002', '1626.00', '1767.00', 'Kyrgyzstan', 'Republic', 'Askar Akajev', '2253', 'KG'), +('KIR', 'Kiribati', 'Oceania', 'Micronesia', '726', '1979', '83000', '59.799999', '40.70', '', 'Kiribati', 'Republic', 'Teburoro Tito', '2256', 'KI'), +('COL', 'Colombia', 'South America', 'South America', '1138914', '1810', '42321000', '70.300003', '102896.00', '105116.00', 'Colombia', 'Republic', 'Andrés Pastrana Arango', '2257', 'CO'), +('COM', 'Comoros', 'Africa', 'Eastern Africa', '1862', '1975', '578000', '60', '4401.00', '4361.00', 'Komori/Comores', 'Republic', 'Azali Assoumani', '2295', 'KM'), +('COG', 'Congo', 'Africa', 'Central Africa', '342000', '1960', '2943000', '47.400002', '2108.00', '2287.00', 'Congo', 'Republic', 'Denis Sassou-Nguesso', '2296', 'CG'), +('COD', 'Congo, The Democratic Republic of the', 'Africa', 'Central Africa', '2344858', '1960', '51654000', '48.799999', '6964.00', '2474.00', 'République Démocratique du Congo', 'Republic', 'Joseph Kabila', '2298', 'CD'), +('CCK', 'Cocos (Keeling) Islands', 'Oceania', 'Australia and New Zealand', '14', '', '600', '', '0.00', '', 'Cocos (Keeling) Islands', 'Territory of Australia', 'Elisabeth II', '2317', 'CC'), +('PRK', 'North Korea', 'Asia', 'Eastern Asia', '120538', '1948', '24039000', '70.699997', '5332.00', '', 'Choson Minjujuui In´min Konghwaguk (Bukhan)', 'Socialistic Republic', 'Kim Jong-il', '2318', 'KP'), +('KOR', 'South Korea', 'Asia', 'Eastern Asia', '99434', '1948', '46844000', '74.400002', '320749.00', '442544.00', 'Taehan Min’guk (Namhan)', 'Republic', 'Kim Dae-jung', '2331', 'KR'), +('GRC', 'Greece', 'Europe', 'Southern Europe', '131626', '1830', '10545700', '78.400002', '120724.00', '119946.00', 'Elláda', 'Republic', 'Kostis Stefanopoulos', '2401', 'GR'), +('HRV', 'Croatia', 'Europe', 'Southern Europe', '56538', '1991', '4473000', '73.699997', '20208.00', '19300.00', 'Hrvatska', 'Republic', 'Štipe Mesic', '2409', 'HR'), +('CUB', 'Cuba', 'North America', 'Caribbean', '110861', '1902', '11201000', '76.199997', '17843.00', '18862.00', 'Cuba', 'Socialistic Republic', 'Fidel Castro Ruz', '2413', 'CU'), +('KWT', 'Kuwait', 'Asia', 'Middle East', '17818', '1961', '1972000', '76.099998', '27037.00', '30373.00', 'Al-Kuwayt', 'Constitutional Monarchy (Emirate)', 'Jabir al-Ahmad al-Jabir al-Sabah', '2429', 'KW'), +('CYP', 'Cyprus', 'Asia', 'Middle East', '9251', '1960', '754700', '76.699997', '9333.00', '8246.00', 'Kýpros/Kibris', 'Republic', 'Glafkos Klerides', '2430', 'CY'), +('LAO', 'Laos', 'Asia', 'Southeast Asia', '236800', '1953', '5433000', '53.099998', '1292.00', '1746.00', 'Lao', 'Republic', 'Khamtay Siphandone', '2432', 'LA'), +('LVA', 'Latvia', 'Europe', 'Baltic Countries', '64589', '1991', '2424200', '68.400002', '6398.00', '5639.00', 'Latvija', 'Republic', 'Vaira Vike-Freiberga', '2434', 'LV'), +('LSO', 'Lesotho', 'Africa', 'Southern Africa', '30355', '1966', '2153000', '50.799999', '1061.00', '1161.00', 'Lesotho', 'Constitutional Monarchy', 'Letsie III', '2437', 'LS'), +('LBN', 'Lebanon', 'Asia', 'Middle East', '10400', '1941', '3282000', '71.300003', '17121.00', '15129.00', 'Lubnan', 'Republic', 'Émile Lahoud', '2438', 'LB'), +('LBR', 'Liberia', 'Africa', 'Western Africa', '111369', '1847', '3154000', '51', '2012.00', '', 'Liberia', 'Republic', 'Charles Taylor', '2440', 'LR'), +('LBY', 'Libyan Arab Jamahiriya', 'Africa', 'Northern Africa', '1759540', '1951', '5605000', '75.5', '44806.00', '40562.00', 'Libiya', 'Socialistic State', 'Muammar al-Qadhafi', '2441', 'LY'), +('LIE', 'Liechtenstein', 'Europe', 'Western Europe', '160', '1806', '32300', '78.800003', '1119.00', '1084.00', 'Liechtenstein', 'Constitutional Monarchy', 'Hans-Adam II', '2446', 'LI'), +('LTU', 'Lithuania', 'Europe', 'Baltic Countries', '65301', '1991', '3698500', '69.099998', '10692.00', '9585.00', 'Lietuva', 'Republic', 'Valdas Adamkus', '2447', 'LT'), +('LUX', 'Luxembourg', 'Europe', 'Western Europe', '2586', '1867', '435700', '77.099998', '16321.00', '15519.00', 'Luxembourg/Lëtzebuerg', 'Constitutional Monarchy', 'Henri', '2452', 'LU'), +('ESH', 'Western Sahara', 'Africa', 'Northern Africa', '266000', '', '293000', '49.799999', '60.00', '', 'As-Sahrawiya', 'Occupied by Marocco', 'Mohammed Abdel Aziz', '2453', 'EH'), +('MAC', 'Macao', 'Asia', 'Eastern Asia', '18', '', '473000', '81.599998', '5749.00', '5940.00', 'Macau/Aomen', 'Special Administrative Region of China', 'Jiang Zemin', '2454', 'MO'), +('MDG', 'Madagascar', 'Africa', 'Eastern Africa', '587041', '1960', '15942000', '55', '3750.00', '3545.00', 'Madagasikara/Madagascar', 'Federal Republic', 'Didier Ratsiraka', '2455', 'MG'), +('MKD', 'Macedonia', 'Europe', 'Southern Europe', '25713', '1991', '2024000', '73.800003', '1694.00', '1915.00', 'Makedonija', 'Republic', 'Boris Trajkovski', '2460', 'MK'), +('MWI', 'Malawi', 'Africa', 'Eastern Africa', '118484', '1964', '10925000', '37.599998', '1687.00', '2527.00', 'Malawi', 'Republic', 'Bakili Muluzi', '2462', 'MW'), +('MDV', 'Maldives', 'Asia', 'Southern and Central Asia', '298', '1965', '286000', '62.200001', '199.00', '', 'Dhivehi Raajje/Maldives', 'Republic', 'Maumoon Abdul Gayoom', '2463', 'MV'), +('MYS', 'Malaysia', 'Asia', 'Southeast Asia', '329758', '1957', '22244000', '70.800003', '69213.00', '97884.00', 'Malaysia', 'Constitutional Monarchy, Federation', 'Salahuddin Abdul Aziz Shah Alhaj', '2464', 'MY'), +('MLI', 'Mali', 'Africa', 'Western Africa', '1240192', '1960', '11234000', '46.700001', '2642.00', '2453.00', 'Mali', 'Republic', 'Alpha Oumar Konaré', '2482', 'ML'), +('MLT', 'Malta', 'Europe', 'Southern Europe', '316', '1964', '380200', '77.900002', '3512.00', '3338.00', 'Malta', 'Republic', 'Guido de Marco', '2484', 'MT'), +('MAR', 'Morocco', 'Africa', 'Northern Africa', '446550', '1956', '28351000', '69.099998', '36124.00', '33514.00', 'Al-Maghrib', 'Constitutional Monarchy', 'Mohammed VI', '2486', 'MA'), +('MHL', 'Marshall Islands', 'Oceania', 'Micronesia', '181', '1990', '64000', '65.5', '97.00', '', 'Marshall Islands/Majol', 'Republic', 'Kessai Note', '2507', 'MH'), +('MTQ', 'Martinique', 'North America', 'Caribbean', '1102', '', '395000', '78.300003', '2731.00', '2559.00', 'Martinique', 'Overseas Department of France', 'Jacques Chirac', '2508', 'MQ'), +('MRT', 'Mauritania', 'Africa', 'Western Africa', '1025520', '1960', '2670000', '50.799999', '998.00', '1081.00', 'Muritaniya/Mauritanie', 'Republic', 'Maaouiya Ould Sid´Ahmad Taya', '2509', 'MR'), +('MUS', 'Mauritius', 'Africa', 'Eastern Africa', '2040', '1968', '1158000', '71', '4251.00', '4186.00', 'Mauritius', 'Republic', 'Cassam Uteem', '2511', 'MU'), +('MYT', 'Mayotte', 'Africa', 'Eastern Africa', '373', '', '149000', '59.5', '0.00', '', 'Mayotte', 'Territorial Collectivity of France', 'Jacques Chirac', '2514', 'YT'), +('MEX', 'Mexico', 'North America', 'Central America', '1958201', '1810', '98881000', '71.5', '414972.00', '401461.00', 'México', 'Federal Republic', 'Vicente Fox Quesada', '2515', 'MX'), +('FSM', 'Micronesia, Federated States of', 'Oceania', 'Micronesia', '702', '1990', '119000', '68.599998', '212.00', '', 'Micronesia', 'Federal Republic', 'Leo A. Falcam', '2689', 'FM'), +('MDA', 'Moldova', 'Europe', 'Eastern Europe', '33851', '1991', '4380000', '64.5', '1579.00', '1872.00', 'Moldova', 'Republic', 'Vladimir Voronin', '2690', 'MD'), +('MCO', 'Monaco', 'Europe', 'Western Europe', '1.5', '1861', '34000', '78.800003', '776.00', '', 'Monaco', 'Constitutional Monarchy', 'Rainier III', '2695', 'MC'), +('MNG', 'Mongolia', 'Asia', 'Eastern Asia', '1566500', '1921', '2662000', '67.300003', '1043.00', '933.00', 'Mongol Uls', 'Republic', 'Natsagiin Bagabandi', '2696', 'MN'), +('MSR', 'Montserrat', 'North America', 'Caribbean', '102', '', '11000', '78', '109.00', '', 'Montserrat', 'Dependent Territory of the UK', 'Elisabeth II', '2697', 'MS'), +('MOZ', 'Mozambique', 'Africa', 'Eastern Africa', '801590', '1975', '19680000', '37.5', '2891.00', '2711.00', 'Moçambique', 'Republic', 'Joaquím A. Chissano', '2698', 'MZ'), +('MMR', 'Myanmar', 'Asia', 'Southeast Asia', '676578', '1948', '45611000', '54.900002', '180375.00', '171028.00', 'Myanma Pye', 'Republic', 'kenraali Than Shwe', '2710', 'MM'), +('NAM', 'Namibia', 'Africa', 'Southern Africa', '824292', '1990', '1726000', '42.5', '3101.00', '3384.00', 'Namibia', 'Republic', 'Sam Nujoma', '2726', 'NA'), +('NRU', 'Nauru', 'Oceania', 'Micronesia', '21', '1968', '12000', '60.799999', '197.00', '', 'Naoero/Nauru', 'Republic', 'Bernard Dowiyogo', '2728', 'NR'), +('NPL', 'Nepal', 'Asia', 'Southern and Central Asia', '147181', '1769', '23930000', '57.799999', '4768.00', '4837.00', 'Nepal', 'Constitutional Monarchy', 'Gyanendra Bir Bikram', '2729', 'NP'), +('NIC', 'Nicaragua', 'North America', 'Central America', '130000', '1838', '5074000', '68.699997', '1988.00', '2023.00', 'Nicaragua', 'Republic', 'Arnoldo Alemán Lacayo', '2734', 'NI'), +('NER', 'Niger', 'Africa', 'Western Africa', '1267000', '1960', '10730000', '41.299999', '1706.00', '1580.00', 'Niger', 'Republic', 'Mamadou Tandja', '2738', 'NE'), +('NGA', 'Nigeria', 'Africa', 'Western Africa', '923768', '1960', '111506000', '51.599998', '65707.00', '58623.00', 'Nigeria', 'Federal Republic', 'Olusegun Obasanjo', '2754', 'NG'), +('NIU', 'Niue', 'Oceania', 'Polynesia', '260', '', '2000', '', '0.00', '', 'Niue', 'Nonmetropolitan Territory of New Zealand', 'Elisabeth II', '2805', 'NU'), +('NFK', 'Norfolk Island', 'Oceania', 'Australia and New Zealand', '36', '', '2000', '', '0.00', '', 'Norfolk Island', 'Territory of Australia', 'Elisabeth II', '2806', 'NF'), +('NOR', 'Norway', 'Europe', 'Nordic Countries', '323877', '1905', '4478500', '78.699997', '145895.00', '153370.00', 'Norge', 'Constitutional Monarchy', 'Harald V', '2807', 'NO'), +('CIV', 'Côte d’Ivoire', 'Africa', 'Western Africa', '322463', '1960', '14786000', '45.200001', '11345.00', '10285.00', 'Côte d’Ivoire', 'Republic', 'Laurent Gbagbo', '2814', 'CI'), +('OMN', 'Oman', 'Asia', 'Middle East', '309500', '1951', '2542000', '71.800003', '16904.00', '16153.00', '´Uman', 'Monarchy (Sultanate)', 'Qabus ibn Sa´id', '2821', 'OM'), +('PAK', 'Pakistan', 'Asia', 'Southern and Central Asia', '796095', '1947', '156483000', '61.099998', '61289.00', '58549.00', 'Pakistan', 'Republic', 'Mohammad Rafiq Tarar', '2831', 'PK'), +('PLW', 'Palau', 'Oceania', 'Micronesia', '459', '1994', '19000', '68.599998', '105.00', '', 'Belau/Palau', 'Republic', 'Kuniwo Nakamura', '2881', 'PW'), +('PAN', 'Panama', 'North America', 'Central America', '75517', '1903', '2856000', '75.5', '9131.00', '8700.00', 'Panamá', 'Republic', 'Mireya Elisa Moscoso Rodríguez', '2882', 'PA'), +('PNG', 'Papua New Guinea', 'Oceania', 'Melanesia', '462840', '1975', '4807000', '63.099998', '4988.00', '6328.00', 'Papua New Guinea/Papua Niugini', 'Constitutional Monarchy', 'Elisabeth II', '2884', 'PG'), +('PRY', 'Paraguay', 'South America', 'South America', '406752', '1811', '5496000', '73.699997', '8444.00', '9555.00', 'Paraguay', 'Republic', 'Luis Ángel González Macchi', '2885', 'PY'), +('PER', 'Peru', 'South America', 'South America', '1285216', '1821', '25662000', '70', '64140.00', '65186.00', 'Perú/Piruw', 'Republic', 'Valentin Paniagua Corazao', '2890', 'PE'), +('PCN', 'Pitcairn', 'Oceania', 'Polynesia', '49', '', '50', '', '0.00', '', 'Pitcairn', 'Dependent Territory of the UK', 'Elisabeth II', '2912', 'PN'), +('MNP', 'Northern Mariana Islands', 'Oceania', 'Micronesia', '464', '', '78000', '75.5', '0.00', '', 'Northern Mariana Islands', 'Commonwealth of the US', 'George W. Bush', '2913', 'MP'), +('PRT', 'Portugal', 'Europe', 'Southern Europe', '91982', '1143', '9997600', '75.800003', '105954.00', '102133.00', 'Portugal', 'Republic', 'Jorge Sampăio', '2914', 'PT'), +('PRI', 'Puerto Rico', 'North America', 'Caribbean', '8875', '', '3869000', '75.599998', '34100.00', '32100.00', 'Puerto Rico', 'Commonwealth of the US', 'George W. Bush', '2919', 'PR'), +('POL', 'Poland', 'Europe', 'Eastern Europe', '323250', '1918', '38653600', '73.199997', '151697.00', '135636.00', 'Polska', 'Republic', 'Aleksander Kwasniewski', '2928', 'PL'), +('GNQ', 'Equatorial Guinea', 'Africa', 'Central Africa', '28051', '1968', '453000', '53.599998', '283.00', '542.00', 'Guinea Ecuatorial', 'Republic', 'Teodoro Obiang Nguema Mbasogo', '2972', 'GQ'), +('QAT', 'Qatar', 'Asia', 'Middle East', '11000', '1971', '599000', '72.400002', '9472.00', '8920.00', 'Qatar', 'Monarchy', 'Hamad ibn Khalifa al-Thani', '2973', 'QA'), +('FRA', 'France', 'Europe', 'Western Europe', '551500', '843', '59225700', '78.800003', '1424285.00', '1392448.00', 'France', 'Republic', 'Jacques Chirac', '2974', 'FR'), +('GUF', 'French Guiana', 'South America', 'South America', '90000', '', '181000', '76.099998', '681.00', '', 'Guyane française', 'Overseas Department of France', 'Jacques Chirac', '3014', 'GF'), +('PYF', 'French Polynesia', 'Oceania', 'Polynesia', '4000', '', '235000', '74.800003', '818.00', '781.00', 'Polynésie française', 'Nonmetropolitan Territory of France', 'Jacques Chirac', '3016', 'PF'), +('REU', 'Réunion', 'Africa', 'Eastern Africa', '2510', '', '699000', '72.699997', '8287.00', '7988.00', 'Réunion', 'Overseas Department of France', 'Jacques Chirac', '3017', 'RE'), +('ROM', 'Romania', 'Europe', 'Eastern Europe', '238391', '1878', '22455500', '69.900002', '38158.00', '34843.00', 'România', 'Republic', 'Ion Iliescu', '3018', 'RO'), +('RWA', 'Rwanda', 'Africa', 'Eastern Africa', '26338', '1962', '7733000', '39.299999', '2036.00', '1863.00', 'Rwanda/Urwanda', 'Republic', 'Paul Kagame', '3047', 'RW'), +('SWE', 'Sweden', 'Europe', 'Nordic Countries', '449964', '836', '8861400', '79.599998', '226492.00', '227757.00', 'Sverige', 'Constitutional Monarchy', 'Carl XVI Gustaf', '3048', 'SE'), +('SHN', 'Saint Helena', 'Africa', 'Western Africa', '314', '', '6000', '76.800003', '0.00', '', 'Saint Helena', 'Dependent Territory of the UK', 'Elisabeth II', '3063', 'SH'), +('KNA', 'Saint Kitts and Nevis', 'North America', 'Caribbean', '261', '1983', '38000', '70.699997', '299.00', '', 'Saint Kitts and Nevis', 'Constitutional Monarchy', 'Elisabeth II', '3064', 'KN'), +('LCA', 'Saint Lucia', 'North America', 'Caribbean', '622', '1979', '154000', '72.300003', '571.00', '', 'Saint Lucia', 'Constitutional Monarchy', 'Elisabeth II', '3065', 'LC'), +('VCT', 'Saint Vincent and the Grenadines', 'North America', 'Caribbean', '388', '1979', '114000', '72.300003', '285.00', '', 'Saint Vincent and the Grenadines', 'Constitutional Monarchy', 'Elisabeth II', '3066', 'VC'), +('SPM', 'Saint Pierre and Miquelon', 'North America', 'North America', '242', '', '7000', '77.599998', '0.00', '', 'Saint-Pierre-et-Miquelon', 'Territorial Collectivity of France', 'Jacques Chirac', '3067', 'PM'), +('DEU', 'Germany', 'Europe', 'Western Europe', '357022', '1955', '82164700', '77.400002', '2133367.00', '2102826.00', 'Deutschland', 'Federal Republic', 'Johannes Rau', '3068', 'DE'), +('SLB', 'Solomon Islands', 'Oceania', 'Melanesia', '28896', '1978', '444000', '71.300003', '182.00', '220.00', 'Solomon Islands', 'Constitutional Monarchy', 'Elisabeth II', '3161', 'SB'), +('ZMB', 'Zambia', 'Africa', 'Eastern Africa', '752618', '1964', '9169000', '37.200001', '3377.00', '3922.00', 'Zambia', 'Republic', 'Frederick Chiluba', '3162', 'ZM'), +('WSM', 'Samoa', 'Oceania', 'Polynesia', '2831', '1962', '180000', '69.199997', '141.00', '157.00', 'Samoa', 'Parlementary Monarchy', 'Malietoa Tanumafili II', '3169', 'WS'), +('SMR', 'San Marino', 'Europe', 'Southern Europe', '61', '885', '27000', '81.099998', '510.00', '', 'San Marino', 'Republic', '', '3171', 'SM'), +('STP', 'Sao Tome and Principe', 'Africa', 'Central Africa', '964', '1975', '147000', '65.300003', '6.00', '', 'Săo Tomé e Príncipe', 'Republic', 'Miguel Trovoada', '3172', 'ST'), +('SAU', 'Saudi Arabia', 'Asia', 'Middle East', '2149690', '1932', '21607000', '67.800003', '137635.00', '146171.00', 'Al-´Arabiya as-Sa´udiya', 'Monarchy', 'Fahd ibn Abdul-Aziz al-Sa´ud', '3173', 'SA'), +('SEN', 'Senegal', 'Africa', 'Western Africa', '196722', '1960', '9481000', '62.200001', '4787.00', '4542.00', 'Sénégal/Sounougal', 'Republic', 'Abdoulaye Wade', '3198', 'SN'), +('SYC', 'Seychelles', 'Africa', 'Eastern Africa', '455', '1976', '77000', '70.400002', '536.00', '539.00', 'Sesel/Seychelles', 'Republic', 'France-Albert René', '3206', 'SC'), +('SLE', 'Sierra Leone', 'Africa', 'Western Africa', '71740', '1961', '4854000', '45.299999', '746.00', '858.00', 'Sierra Leone', 'Republic', 'Ahmed Tejan Kabbah', '3207', 'SL'), +('SGP', 'Singapore', 'Asia', 'Southeast Asia', '618', '1965', '3567000', '80.099998', '86503.00', '96318.00', 'Singapore/Singapura/Xinjiapo/Singapur', 'Republic', 'Sellapan Rama Nathan', '3208', 'SG'), +('SVK', 'Slovakia', 'Europe', 'Eastern Europe', '49012', '1993', '5398700', '73.699997', '20594.00', '19452.00', 'Slovensko', 'Republic', 'Rudolf Schuster', '3209', 'SK'), +('SVN', 'Slovenia', 'Europe', 'Southern Europe', '20256', '1991', '1987800', '74.900002', '19756.00', '18202.00', 'Slovenija', 'Republic', 'Milan Kucan', '3212', 'SI'), +('SOM', 'Somalia', 'Africa', 'Eastern Africa', '637657', '1960', '10097000', '46.200001', '935.00', '', 'Soomaaliya', 'Republic', 'Abdiqassim Salad Hassan', '3214', 'SO'), +('LKA', 'Sri Lanka', 'Asia', 'Southern and Central Asia', '65610', '1948', '18827000', '71.800003', '15706.00', '15091.00', 'Sri Lanka/Ilankai', 'Republic', 'Chandrika Kumaratunga', '3217', 'LK'), +('SDN', 'Sudan', 'Africa', 'Northern Africa', '2505813', '1956', '29490000', '56.599998', '10162.00', '', 'As-Sudan', 'Islamic Republic', 'Omar Hassan Ahmad al-Bashir', '3225', 'SD'), +('FIN', 'Finland', 'Europe', 'Nordic Countries', '338145', '1917', '5171300', '77.400002', '121914.00', '119833.00', 'Suomi', 'Republic', 'Tarja Halonen', '3236', 'FI'), +('SUR', 'Suriname', 'South America', 'South America', '163265', '1975', '417000', '71.400002', '870.00', '706.00', 'Suriname', 'Republic', 'Ronald Venetiaan', '3243', 'SR'), +('SWZ', 'Swaziland', 'Africa', 'Southern Africa', '17364', '1968', '1008000', '40.400002', '1206.00', '1312.00', 'kaNgwane', 'Monarchy', 'Mswati III', '3244', 'SZ'), +('CHE', 'Switzerland', 'Europe', 'Western Europe', '41284', '1499', '7160400', '79.599998', '264478.00', '256092.00', 'Schweiz/Suisse/Svizzera/Svizra', 'Federation', 'Adolf Ogi', '3248', 'CH'), +('SYR', 'Syria', 'Asia', 'Middle East', '185180', '1941', '16125000', '68.5', '65984.00', '64926.00', 'Suriya', 'Republic', 'Bashar al-Assad', '3250', 'SY'), +('TJK', 'Tajikistan', 'Asia', 'Southern and Central Asia', '143100', '1991', '6188000', '64.099998', '1990.00', '1056.00', 'Toçikiston', 'Republic', 'Emomali Rahmonov', '3261', 'TJ'), +('TWN', 'Taiwan', 'Asia', 'Eastern Asia', '36188', '1945', '22256000', '76.400002', '256254.00', '263451.00', 'T’ai-wan', 'Republic', 'Chen Shui-bian', '3263', 'TW'), +('TZA', 'Tanzania', 'Africa', 'Eastern Africa', '883749', '1961', '33517000', '52.299999', '8005.00', '7388.00', 'Tanzania', 'Republic', 'Benjamin William Mkapa', '3306', 'TZ'), +('DNK', 'Denmark', 'Europe', 'Nordic Countries', '43094', '800', '5330000', '76.5', '174099.00', '169264.00', 'Danmark', 'Constitutional Monarchy', 'Margrethe II', '3315', 'DK'), +('THA', 'Thailand', 'Asia', 'Southeast Asia', '513115', '1350', '61399000', '68.599998', '116416.00', '153907.00', 'Prathet Thai', 'Constitutional Monarchy', 'Bhumibol Adulyadej', '3320', 'TH'), +('TGO', 'Togo', 'Africa', 'Western Africa', '56785', '1960', '4629000', '54.700001', '1449.00', '1400.00', 'Togo', 'Republic', 'Gnassingbé Eyadéma', '3332', 'TG'), +('TKL', 'Tokelau', 'Oceania', 'Polynesia', '12', '', '2000', '', '0.00', '', 'Tokelau', 'Nonmetropolitan Territory of New Zealand', 'Elisabeth II', '3333', 'TK'), +('TON', 'Tonga', 'Oceania', 'Polynesia', '650', '1970', '99000', '67.900002', '146.00', '170.00', 'Tonga', 'Monarchy', 'Taufa''ahau Tupou IV', '3334', 'TO'), +('TTO', 'Trinidad and Tobago', 'North America', 'Caribbean', '5130', '1962', '1295000', '68', '6232.00', '5867.00', 'Trinidad and Tobago', 'Republic', 'Arthur N. R. Robinson', '3336', 'TT'), +('TCD', 'Chad', 'Africa', 'Central Africa', '1284000', '1960', '7651000', '50.5', '1208.00', '1102.00', 'Tchad/Tshad', 'Republic', 'Idriss Déby', '3337', 'TD'), +('CZE', 'Czech Republic', 'Europe', 'Eastern Europe', '78866', '1993', '10278100', '74.5', '55017.00', '52037.00', '¸esko', 'Republic', 'Václav Havel', '3339', 'CZ'), +('TUN', 'Tunisia', 'Africa', 'Northern Africa', '163610', '1956', '9586000', '73.699997', '20026.00', '18898.00', 'Tunis/Tunisie', 'Republic', 'Zine al-Abidine Ben Ali', '3349', 'TN'), +('TUR', 'Turkey', 'Asia', 'Middle East', '774815', '1923', '66591000', '71', '210721.00', '189122.00', 'Türkiye', 'Republic', 'Ahmet Necdet Sezer', '3358', 'TR'), +('TKM', 'Turkmenistan', 'Asia', 'Southern and Central Asia', '488100', '1991', '4459000', '60.900002', '4397.00', '2000.00', 'Türkmenostan', 'Republic', 'Saparmurad Nijazov', '3419', 'TM'), +('TCA', 'Turks and Caicos Islands', 'North America', 'Caribbean', '430', '', '17000', '73.300003', '96.00', '', 'The Turks and Caicos Islands', 'Dependent Territory of the UK', 'Elisabeth II', '3423', 'TC'), +('TUV', 'Tuvalu', 'Oceania', 'Polynesia', '26', '1978', '12000', '66.300003', '6.00', '', 'Tuvalu', 'Constitutional Monarchy', 'Elisabeth II', '3424', 'TV'), +('UGA', 'Uganda', 'Africa', 'Eastern Africa', '241038', '1962', '21778000', '42.900002', '6313.00', '6887.00', 'Uganda', 'Republic', 'Yoweri Museveni', '3425', 'UG'), +('UKR', 'Ukraine', 'Europe', 'Eastern Europe', '603700', '1991', '50456000', '66', '42168.00', '49677.00', 'Ukrajina', 'Republic', 'Leonid Kutšma', '3426', 'UA'), +('HUN', 'Hungary', 'Europe', 'Eastern Europe', '93030', '1918', '10043200', '71.400002', '48267.00', '45914.00', 'Magyarország', 'Republic', 'Ferenc Mádl', '3483', 'HU'), +('URY', 'Uruguay', 'South America', 'South America', '175016', '1828', '3337000', '75.199997', '20831.00', '19967.00', 'Uruguay', 'Republic', 'Jorge Batlle Ibáńez', '3492', 'UY'), +('NCL', 'New Caledonia', 'Oceania', 'Melanesia', '18575', '', '214000', '72.800003', '3563.00', '', 'Nouvelle-Calédonie', 'Nonmetropolitan Territory of France', 'Jacques Chirac', '3493', 'NC'), +('NZL', 'New Zealand', 'Oceania', 'Australia and New Zealand', '270534', '1907', '3862000', '77.800003', '54669.00', '64960.00', 'New Zealand/Aotearoa', 'Constitutional Monarchy', 'Elisabeth II', '3499', 'NZ'), +('UZB', 'Uzbekistan', 'Asia', 'Southern and Central Asia', '447400', '1991', '24318000', '63.700001', '14194.00', '21300.00', 'Uzbekiston', 'Republic', 'Islam Karimov', '3503', 'UZ'), +('BLR', 'Belarus', 'Europe', 'Eastern Europe', '207600', '1991', '10236000', '68', '13714.00', '', 'Belarus', 'Republic', 'Aljaksandr Lukašenka', '3520', 'BY'), +('WLF', 'Wallis and Futuna', 'Oceania', 'Polynesia', '200', '', '15000', '', '0.00', '', 'Wallis-et-Futuna', 'Nonmetropolitan Territory of France', 'Jacques Chirac', '3536', 'WF'), +('VUT', 'Vanuatu', 'Oceania', 'Melanesia', '12189', '1980', '190000', '60.599998', '261.00', '246.00', 'Vanuatu', 'Republic', 'John Bani', '3537', 'VU'), +('VAT', 'Holy See (Vatican City State)', 'Europe', 'Southern Europe', '0.40000001', '1929', '1000', '', '9.00', '', 'Santa Sede/Cittŕ del Vaticano', 'Independent Church State', 'Johannes Paavali II', '3538', 'VA'), +('VEN', 'Venezuela', 'South America', 'South America', '912050', '1811', '24170000', '73.099998', '95023.00', '88434.00', 'Venezuela', 'Federal Republic', 'Hugo Chávez Frías', '3539', 'VE'), +('RUS', 'Russian Federation', 'Europe', 'Eastern Europe', '17075400', '1991', '146934000', '67.199997', '276608.00', '442989.00', 'Rossija', 'Federal Republic', 'Vladimir Putin', '3580', 'RU'), +('VNM', 'Vietnam', 'Asia', 'Southeast Asia', '331689', '1945', '79832000', '69.300003', '21929.00', '22834.00', 'Vięt Nam', 'Socialistic Republic', 'Trân Duc Luong', '3770', 'VN'), +('EST', 'Estonia', 'Europe', 'Baltic Countries', '45227', '1991', '1439200', '69.5', '5328.00', '3371.00', 'Eesti', 'Republic', 'Lennart Meri', '3791', 'EE'), +('USA', 'United States', 'North America', 'North America', '9363520', '1776', '278357000', '77.099998', '8510700.00', '8110900.00', 'United States', 'Federal Republic', 'George W. Bush', '3813', 'US'), +('VIR', 'Virgin Islands, U.S.', 'North America', 'Caribbean', '347', '', '93000', '78.099998', '0.00', '', 'Virgin Islands of the United States', 'US Territory', 'George W. Bush', '4067', 'VI'), +('ZWE', 'Zimbabwe', 'Africa', 'Eastern Africa', '390757', '1980', '11669000', '37.799999', '5951.00', '8670.00', 'Zimbabwe', 'Republic', 'Robert G. Mugabe', '4068', 'ZW'), +('PSE', 'Palestine', 'Asia', 'Middle East', '6257', '', '3101000', '71.400002', '4173.00', '', 'Filastin', 'Autonomous Area', 'Yasser (Yasir) Arafat', '4074', 'PS'), +('ATA', 'Antarctica', 'Antarctica', 'Antarctica', '13120000', '', '0', '', '0.00', '', '–', 'Co-administrated', '', '', 'AQ'), +('BVT', 'Bouvet Island', 'Antarctica', 'Antarctica', '59', '', '0', '', '0.00', '', 'Bouvetřya', 'Dependent Territory of Norway', 'Harald V', '', 'BV'), +('IOT', 'British Indian Ocean Territory', 'Africa', 'Eastern Africa', '78', '', '0', '', '0.00', '', 'British Indian Ocean Territory', 'Dependent Territory of the UK', 'Elisabeth II', '', 'IO'), +('SGS', 'South Georgia and the South Sandwich Islands', 'Antarctica', 'Antarctica', '3903', '', '0', '', '0.00', '', 'South Georgia and the South Sandwich Islands', 'Dependent Territory of the UK', 'Elisabeth II', '', 'GS'), +('HMD', 'Heard Island and McDonald Islands', 'Antarctica', 'Antarctica', '359', '', '0', '', '0.00', '', 'Heard and McDonald Islands', 'Territory of Australia', 'Elisabeth II', '', 'HM'), +('ATF', 'French Southern territories', 'Antarctica', 'Antarctica', '7780', '', '0', '', '0.00', '', 'Terres australes françaises', 'Nonmetropolitan Territory of France', 'Jacques Chirac', '', 'TF'), +('UMI', 'United States Minor Outlying Islands', 'Oceania', 'Micronesia/Caribbean', '16', '', '0', '', '0.00', '', 'United States Minor Outlying Islands', 'Dependent Territory of the US', 'George W. Bush', '', 'UM'); + +-- +-- Data for Name: countrylanguage; Type: TABLE DATA; Schema: public; Owner: chriskl +-- + +INSERT INTO countrylanguage (countrycode, language, isofficial, percentage) VALUES +('AFG', 'Pashto', 't', '52.400002'), +('NLD', 'Dutch', 't', '95.599998'), +('ANT', 'Papiamento', 't', '86.199997'), +('ALB', 'Albaniana', 't', '97.900002'), +('DZA', 'Arabic', 't', '86'), +('ASM', 'Samoan', 't', '90.599998'), +('AND', 'Spanish', 'f', '44.599998'), +('AGO', 'Ovimbundu', 'f', '37.200001'), +('AIA', 'English', 't', '0'), +('ATG', 'Creole English', 'f', '95.699997'), +('ARE', 'Arabic', 't', '42'), +('ARG', 'Spanish', 't', '96.800003'), +('ARM', 'Armenian', 't', '93.400002'), +('ABW', 'Papiamento', 'f', '76.699997'), +('AUS', 'English', 't', '81.199997'), +('AZE', 'Azerbaijani', 't', '89'), +('BHS', 'Creole English', 'f', '89.699997'), +('BHR', 'Arabic', 't', '67.699997'), +('BGD', 'Bengali', 't', '97.699997'), +('BRB', 'Bajan', 'f', '95.099998'), +('BEL', 'Dutch', 't', '59.200001'), +('BLZ', 'English', 't', '50.799999'), +('BEN', 'Fon', 'f', '39.799999'), +('BMU', 'English', 't', '100'), +('BTN', 'Dzongkha', 't', '50'), +('BOL', 'Spanish', 't', '87.699997'), +('BIH', 'Serbo-Croatian', 't', '99.199997'), +('BWA', 'Tswana', 'f', '75.5'), +('BRA', 'Portuguese', 't', '97.5'), +('GBR', 'English', 't', '97.300003'), +('VGB', 'English', 't', '0'), +('BRN', 'Malay', 't', '45.5'), +('BGR', 'Bulgariana', 't', '83.199997'), +('BFA', 'Mossi', 'f', '50.200001'), +('BDI', 'Kirundi', 't', '98.099998'), +('CYM', 'English', 't', '0'), +('CHL', 'Spanish', 't', '89.699997'), +('COK', 'Maori', 't', '0'), +('CRI', 'Spanish', 't', '97.5'), +('DJI', 'Somali', 'f', '43.900002'), +('DMA', 'Creole English', 'f', '100'), +('DOM', 'Spanish', 't', '98'), +('ECU', 'Spanish', 't', '93'), +('EGY', 'Arabic', 't', '98.800003'), +('SLV', 'Spanish', 't', '100'), +('ERI', 'Tigrinja', 't', '49.099998'), +('ESP', 'Spanish', 't', '74.400002'), +('ZAF', 'Zulu', 't', '22.700001'), +('ETH', 'Oromo', 'f', '31'), +('FLK', 'English', 't', '0'), +('FJI', 'Fijian', 't', '50.799999'), +('PHL', 'Pilipino', 't', '29.299999'), +('FRO', 'Faroese', 't', '100'), +('GAB', 'Fang', 'f', '35.799999'), +('GMB', 'Malinke', 'f', '34.099998'), +('GEO', 'Georgiana', 't', '71.699997'), +('GHA', 'Akan', 'f', '52.400002'), +('GIB', 'English', 't', '88.900002'), +('GRD', 'Creole English', 'f', '100'), +('GRL', 'Greenlandic', 't', '87.5'), +('GLP', 'Creole French', 'f', '95'), +('GUM', 'English', 't', '37.5'), +('GTM', 'Spanish', 't', '64.699997'), +('GIN', 'Ful', 'f', '38.599998'), +('GNB', 'Crioulo', 'f', '36.400002'), +('GUY', 'Creole English', 'f', '96.400002'), +('HTI', 'Haiti Creole', 'f', '100'), +('HND', 'Spanish', 't', '97.199997'), +('HKG', 'Canton Chinese', 'f', '88.699997'), +('SJM', 'Norwegian', 't', '0'), +('IDN', 'Javanese', 'f', '39.400002'), +('IND', 'Hindi', 't', '39.900002'), +('IRQ', 'Arabic', 't', '77.199997'), +('IRN', 'Persian', 't', '45.700001'), +('IRL', 'English', 't', '98.400002'), +('ISL', 'Icelandic', 't', '95.699997'), +('ISR', 'Hebrew', 't', '63.099998'), +('ITA', 'Italian', 't', '94.099998'), +('TMP', 'Sunda', 'f', '0'), +('AUT', 'German', 't', '92'), +('JAM', 'Creole English', 'f', '94.199997'), +('JPN', 'Japanese', 't', '99.099998'), +('YEM', 'Arabic', 't', '99.599998'), +('JOR', 'Arabic', 't', '97.900002'), +('CXR', 'Chinese', 'f', '0'), +('YUG', 'Serbo-Croatian', 't', '75.199997'), +('KHM', 'Khmer', 't', '88.599998'), +('CMR', 'Fang', 'f', '19.700001'), +('CAN', 'English', 't', '60.400002'), +('CPV', 'Crioulo', 'f', '100'), +('KAZ', 'Kazakh', 't', '46'), +('KEN', 'Kikuyu', 'f', '20.9'), +('CAF', 'Gbaya', 'f', '23.799999'), +('CHN', 'Chinese', 't', '92'), +('KGZ', 'Kirgiz', 't', '59.700001'), +('KIR', 'Kiribati', 't', '98.900002'), +('COL', 'Spanish', 't', '99'), +('COM', 'Comorian', 't', '75'), +('COG', 'Kongo', 'f', '51.5'), +('COD', 'Luba', 'f', '18'), +('CCK', 'Malay', 'f', '0'), +('PRK', 'Korean', 't', '99.900002'), +('KOR', 'Korean', 't', '99.900002'), +('GRC', 'Greek', 't', '98.5'), +('HRV', 'Serbo-Croatian', 't', '95.900002'), +('CUB', 'Spanish', 't', '100'), +('KWT', 'Arabic', 't', '78.099998'), +('CYP', 'Greek', 't', '74.099998'), +('LAO', 'Lao', 't', '67.199997'), +('LVA', 'Latvian', 't', '55.099998'), +('LSO', 'Sotho', 't', '85'), +('LBN', 'Arabic', 't', '93'), +('LBR', 'Kpelle', 'f', '19.5'), +('LBY', 'Arabic', 't', '96'), +('LIE', 'German', 't', '89'), +('LTU', 'Lithuanian', 't', '81.599998'), +('LUX', 'Luxembourgish', 't', '64.400002'), +('ESH', 'Arabic', 't', '100'), +('MAC', 'Canton Chinese', 'f', '85.599998'), +('MDG', 'Malagasy', 't', '98.900002'), +('MKD', 'Macedonian', 't', '66.5'), +('MWI', 'Chichewa', 't', '58.299999'), +('MDV', 'Dhivehi', 't', '100'), +('MYS', 'Malay', 't', '58.400002'), +('MLI', 'Bambara', 'f', '31.799999'), +('MLT', 'Maltese', 't', '95.800003'), +('MAR', 'Arabic', 't', '65'), +('MHL', 'Marshallese', 't', '96.800003'), +('MTQ', 'Creole French', 'f', '96.599998'), +('MRT', 'Hassaniya', 'f', '81.699997'), +('MUS', 'Creole French', 'f', '70.599998'), +('MYT', 'Mahoré', 'f', '41.900002'), +('MEX', 'Spanish', 't', '92.099998'), +('FSM', 'Trukese', 'f', '41.599998'), +('MDA', 'Romanian', 't', '61.900002'), +('MCO', 'French', 't', '41.900002'), +('MNG', 'Mongolian', 't', '78.800003'), +('MSR', 'English', 't', '0'), +('MOZ', 'Makua', 'f', '27.799999'), +('MMR', 'Burmese', 't', '69'), +('NAM', 'Ovambo', 'f', '50.700001'), +('NRU', 'Nauru', 't', '57.5'), +('NPL', 'Nepali', 't', '50.400002'), +('NIC', 'Spanish', 't', '97.599998'), +('NER', 'Hausa', 'f', '53.099998'), +('NGA', 'Joruba', 'f', '21.4'), +('NIU', 'Niue', 'f', '0'), +('NFK', 'English', 't', '0'), +('NOR', 'Norwegian', 't', '96.599998'), +('CIV', 'Akan', 'f', '30'), +('OMN', 'Arabic', 't', '76.699997'), +('PAK', 'Punjabi', 'f', '48.200001'), +('PLW', 'Palau', 't', '82.199997'), +('PAN', 'Spanish', 't', '76.800003'), +('PNG', 'Papuan Languages', 'f', '78.099998'), +('PRY', 'Spanish', 't', '55.099998'), +('PER', 'Spanish', 't', '79.800003'), +('PCN', 'Pitcairnese', 'f', '0'), +('MNP', 'Philippene Languages', 'f', '34.099998'), +('PRT', 'Portuguese', 't', '99'), +('PRI', 'Spanish', 't', '51.299999'), +('POL', 'Polish', 't', '97.599998'), +('GNQ', 'Fang', 'f', '84.800003'), +('QAT', 'Arabic', 't', '40.700001'), +('FRA', 'French', 't', '93.599998'), +('GUF', 'Creole French', 'f', '94.300003'), +('PYF', 'Tahitian', 'f', '46.400002'), +('REU', 'Creole French', 'f', '91.5'), +('ROM', 'Romanian', 't', '90.699997'), +('RWA', 'Rwanda', 't', '100'), +('SWE', 'Swedish', 't', '89.5'), +('SHN', 'English', 't', '0'), +('KNA', 'Creole English', 'f', '100'), +('LCA', 'Creole French', 'f', '80'), +('VCT', 'Creole English', 'f', '99.099998'), +('SPM', 'French', 't', '0'), +('DEU', 'German', 't', '91.300003'), +('SLB', 'Malenasian Languages', 'f', '85.599998'), +('ZMB', 'Bemba', 'f', '29.700001'), +('WSM', 'Samoan-English', 'f', '52'), +('SMR', 'Italian', 't', '100'), +('STP', 'Crioulo', 'f', '86.300003'), +('SAU', 'Arabic', 't', '95'), +('SEN', 'Wolof', 't', '48.099998'), +('SYC', 'Seselwa', 'f', '91.300003'), +('SLE', 'Mende', 'f', '34.799999'), +('SGP', 'Chinese', 't', '77.099998'), +('SVK', 'Slovak', 't', '85.599998'), +('SVN', 'Slovene', 't', '87.900002'), +('SOM', 'Somali', 't', '98.300003'), +('LKA', 'Singali', 't', '60.299999'), +('SDN', 'Arabic', 't', '49.400002'), +('FIN', 'Finnish', 't', '92.699997'), +('SUR', 'Sranantonga', 'f', '81'), +('SWZ', 'Swazi', 't', '89.900002'), +('CHE', 'German', 't', '63.599998'), +('SYR', 'Arabic', 't', '90'), +('TJK', 'Tadzhik', 't', '62.200001'), +('TWN', 'Min', 'f', '66.699997'), +('TZA', 'Nyamwesi', 'f', '21.1'), +('DNK', 'Danish', 't', '93.5'), +('THA', 'Thai', 't', '52.599998'), +('TGO', 'Ewe', 't', '23.200001'), +('TKL', 'Tokelau', 'f', '0'), +('TON', 'Tongan', 't', '98.300003'), +('TTO', 'English', 'f', '93.5'), +('TCD', 'Sara', 'f', '27.700001'), +('CZE', 'Czech', 't', '81.199997'), +('TUN', 'Arabic', 't', '69.900002'), +('TUR', 'Turkish', 't', '87.599998'), +('TKM', 'Turkmenian', 't', '76.699997'), +('TCA', 'English', 't', '0'), +('TUV', 'Tuvalu', 't', '92.5'), +('UGA', 'Ganda', 'f', '18.1'), +('UKR', 'Ukrainian', 't', '64.699997'), +('HUN', 'Hungarian', 't', '98.5'), +('URY', 'Spanish', 't', '95.699997'), +('NCL', 'Malenasian Languages', 'f', '45.400002'), +('NZL', 'English', 't', '87'), +('UZB', 'Uzbek', 't', '72.599998'), +('BLR', 'Belorussian', 't', '65.599998'), +('WLF', 'Wallis', 'f', '0'), +('VUT', 'Bislama', 't', '56.599998'), +('VAT', 'Italian', 't', '0'), +('VEN', 'Spanish', 't', '96.900002'), +('RUS', 'Russian', 't', '86.599998'), +('VNM', 'Vietnamese', 't', '86.800003'), +('EST', 'Estonian', 't', '65.300003'), +('USA', 'English', 't', '86.199997'), +('VIR', 'English', 't', '81.699997'), +('UMI', 'English', 't', '0'), +('ZWE', 'Shona', 'f', '72.099998'), +('PSE', 'Arabic', 'f', '95.900002'), +('AFG', 'Dari', 't', '32.099998'), +('NLD', 'Fries', 'f', '3.7'), +('ANT', 'English', 'f', '7.8000002'), +('ALB', 'Greek', 'f', '1.8'), +('DZA', 'Berberi', 'f', '14'), +('ASM', 'English', 't', '3.0999999'), +('AND', 'Catalan', 't', '32.299999'), +('AGO', 'Mbundu', 'f', '21.6'), +('ATG', 'English', 't', '0'), +('ARE', 'Hindi', 'f', '0'), +('ARG', 'Italian', 'f', '1.7'), +('ARM', 'Azerbaijani', 'f', '2.5999999'), +('ABW', 'English', 'f', '9.5'), +('AUS', 'Italian', 'f', '2.2'), +('AZE', 'Russian', 'f', '3'), +('BHS', 'Creole French', 'f', '10.3'), +('BHR', 'English', 'f', '0'), +('BGD', 'Chakma', 'f', '0.40000001'), +('BRB', 'English', 't', '0'), +('BEL', 'French', 't', '32.599998'), +('BLZ', 'Spanish', 'f', '31.6'), +('BEN', 'Joruba', 'f', '12.2'), +('BTN', 'Nepali', 'f', '34.799999'), +('BOL', 'Ketšua', 't', '8.1000004'), +('BWA', 'Shona', 'f', '12.3'), +('BRA', 'German', 'f', '0.5'), +('GBR', 'Kymri', 'f', '0.89999998'), +('BRN', 'Malay-English', 'f', '28.799999'), +('BGR', 'Turkish', 'f', '9.3999996'), +('BFA', 'Ful', 'f', '9.6999998'), +('BDI', 'French', 't', '0'), +('CHL', 'Araucan', 'f', '9.6000004'), +('COK', 'English', 'f', '0'), +('CRI', 'Creole English', 'f', '2'), +('DJI', 'Afar', 'f', '34.799999'), +('DMA', 'Creole French', 'f', '0'), +('DOM', 'Creole French', 'f', '2'), +('ECU', 'Ketšua', 'f', '7'), +('EGY', 'Sinaberberi', 'f', '0'), +('SLV', 'Nahua', 'f', '0'), +('ERI', 'Tigre', 'f', '31.700001'), +('ESP', 'Catalan', 'f', '16.9'), +('ZAF', 'Xhosa', 't', '17.700001'), +('ETH', 'Amhara', 'f', '30'), +('FJI', 'Hindi', 'f', '43.700001'), +('PHL', 'Cebuano', 'f', '23.299999'), +('FRO', 'Danish', 't', '0'), +('GAB', 'Punu-sira-nzebi', 'f', '17.1'), +('GMB', 'Ful', 'f', '16.200001'), +('GEO', 'Russian', 'f', '8.8000002'), +('GHA', 'Mossi', 'f', '15.8'), +('GIB', 'Arabic', 'f', '7.4000001'), +('GRL', 'Danish', 't', '12.5'), +('GLP', 'French', 't', '0'), +('GUM', 'Chamorro', 't', '29.6'), +('GTM', 'Quiché', 'f', '10.1'), +('GIN', 'Malinke', 'f', '23.200001'), +('GNB', 'Ful', 'f', '16.6'), +('GUY', 'Caribbean', 'f', '2.2'), +('HTI', 'French', 't', '0'), +('HND', 'Garifuna', 'f', '1.3'), +('HKG', 'English', 't', '2.2'), +('SJM', 'Russian', 'f', '0'), +('IDN', 'Sunda', 'f', '15.8'), +('IND', 'Bengali', 'f', '8.1999998'), +('IRQ', 'Kurdish', 'f', '19'), +('IRN', 'Azerbaijani', 'f', '16.799999'), +('IRL', 'Irish', 't', '1.6'), +('ISL', 'English', 'f', '0'), +('ISR', 'Arabic', 't', '18'), +('ITA', 'Sardinian', 'f', '2.7'), +('TMP', 'Portuguese', 't', '0'), +('AUT', 'Serbo-Croatian', 'f', '2.2'), +('JAM', 'Hindi', 'f', '1.9'), +('JPN', 'Korean', 'f', '0.5'), +('YEM', 'Soqutri', 'f', '0'), +('JOR', 'Circassian', 'f', '1'), +('CXR', 'English', 't', '0'), +('YUG', 'Albaniana', 'f', '16.5'), +('KHM', 'Vietnamese', 'f', '5.5'), +('CMR', 'Bamileke-bamum', 'f', '18.6'), +('CAN', 'French', 't', '23.4'), +('CPV', 'Portuguese', 't', '0'), +('KAZ', 'Russian', 'f', '34.700001'), +('KEN', 'Luhya', 'f', '13.8'), +('CAF', 'Banda', 'f', '23.5'), +('CHN', 'Zhuang', 'f', '1.4'), +('KGZ', 'Russian', 't', '16.200001'), +('KIR', 'Tuvalu', 'f', '0.5'), +('COL', 'Chibcha', 'f', '0.40000001'), +('COM', 'Comorian-French', 'f', '12.9'), +('COG', 'Teke', 'f', '17.299999'), +('COD', 'Kongo', 'f', '16'), +('CCK', 'English', 't', '0'), +('PRK', 'Chinese', 'f', '0.1'), +('KOR', 'Chinese', 'f', '0.1'), +('GRC', 'Turkish', 'f', '0.89999998'), +('HRV', 'Slovene', 'f', '0'), +('KWT', 'English', 'f', '0'), +('CYP', 'Turkish', 't', '22.4'), +('LAO', 'Mon-khmer', 'f', '16.5'), +('LVA', 'Russian', 'f', '32.5'), +('LSO', 'Zulu', 'f', '15'), +('LBN', 'Armenian', 'f', '5.9000001'), +('LBR', 'Bassa', 'f', '13.7'), +('LBY', 'Berberi', 'f', '1'), +('LIE', 'Italian', 'f', '2.5'), +('LTU', 'Russian', 'f', '8.1000004'), +('LUX', 'Portuguese', 'f', '13'), +('MAC', 'Portuguese', 't', '2.3'), +('MDG', 'French', 't', '0'), +('MKD', 'Albaniana', 'f', '22.9'), +('MWI', 'Lomwe', 'f', '18.4'), +('MDV', 'English', 'f', '0'), +('MYS', 'Chinese', 'f', '9'), +('MLI', 'Ful', 'f', '13.9'), +('MLT', 'English', 't', '2.0999999'), +('MAR', 'Berberi', 'f', '33'), +('MHL', 'English', 't', '0'), +('MTQ', 'French', 't', '0'), +('MRT', 'Wolof', 'f', '6.5999999'), +('MUS', 'Bhojpuri', 'f', '21.1'), +('MYT', 'French', 't', '20.299999'), +('MEX', 'Náhuatl', 'f', '1.8'), +('FSM', 'Pohnpei', 'f', '23.799999'), +('MDA', 'Russian', 'f', '23.200001'), +('MCO', 'Monegasque', 'f', '16.1'), +('MNG', 'Kazakh', 'f', '5.9000001'), +('MOZ', 'Tsonga', 'f', '12.4'), +('MMR', 'Shan', 'f', '8.5'), +('NAM', 'Nama', 'f', '12.4'), +('NRU', 'Kiribati', 'f', '17.9'), +('NPL', 'Maithili', 'f', '11.9'), +('NIC', 'Miskito', 'f', '1.6'), +('NER', 'Songhai-zerma', 'f', '21.200001'), +('NGA', 'Hausa', 'f', '21.1'), +('NIU', 'English', 't', '0'), +('NOR', 'English', 'f', '0.5'), +('CIV', 'Gur', 'f', '11.7'), +('OMN', 'Balochi', 'f', '0'), +('PAK', 'Pashto', 'f', '13.1'), +('PLW', 'Philippene Languages', 'f', '9.1999998'), +('PAN', 'Creole English', 'f', '14'), +('PNG', 'Malenasian Languages', 'f', '20'), +('PRY', 'Guaraní', 't', '40.099998'), +('PER', 'Ketšua', 't', '16.4'), +('MNP', 'Chamorro', 'f', '30'), +('PRI', 'English', 'f', '47.400002'), +('POL', 'German', 'f', '1.3'), +('GNQ', 'Bubi', 'f', '8.6999998'), +('QAT', 'Urdu', 'f', '0'), +('FRA', 'Arabic', 'f', '2.5'), +('GUF', 'Indian Languages', 'f', '1.9'), +('PYF', 'French', 't', '40.799999'), +('REU', 'Chinese', 'f', '2.8'), +('ROM', 'Hungarian', 'f', '7.1999998'), +('RWA', 'French', 't', '0'), +('SWE', 'Finnish', 'f', '2.4000001'), +('KNA', 'English', 't', '0'), +('LCA', 'English', 't', '20'), +('VCT', 'English', 't', '0'), +('DEU', 'Turkish', 'f', '2.5999999'), +('SLB', 'Papuan Languages', 'f', '8.6000004'), +('ZMB', 'Tongan', 'f', '11'), +('WSM', 'Samoan', 't', '47.5'), +('STP', 'French', 'f', '0.69999999'), +('SEN', 'Ful', 'f', '21.700001'), +('SYC', 'English', 't', '3.8'), +('SLE', 'Temne', 'f', '31.799999'), +('SGP', 'Malay', 't', '14.1'), +('SVK', 'Hungarian', 'f', '10.5'), +('SVN', 'Serbo-Croatian', 'f', '7.9000001'), +('SOM', 'Arabic', 't', '0'), +('LKA', 'Tamil', 't', '19.6'), +('SDN', 'Dinka', 'f', '11.5'), +('FIN', 'Swedish', 't', '5.6999998'), +('SUR', 'Hindi', 'f', '0'), +('SWZ', 'Zulu', 'f', '2'), +('CHE', 'French', 't', '19.200001'), +('SYR', 'Kurdish', 'f', '9'), +('TJK', 'Uzbek', 'f', '23.200001'), +('TWN', 'Mandarin Chinese', 't', '20.1'), +('TZA', 'Swahili', 't', '8.8000002'), +('DNK', 'Turkish', 'f', '0.80000001'), +('THA', 'Lao', 'f', '26.9'), +('TGO', 'Kabyé', 't', '13.8'), +('TKL', 'English', 't', '0'), +('TON', 'English', 't', '0'), +('TTO', 'Hindi', 'f', '3.4000001'), +('TCD', 'Arabic', 't', '12.3'), +('CZE', 'Moravian', 'f', '12.9'), +('TUN', 'Arabic-French', 'f', '26.299999'), +('TUR', 'Kurdish', 'f', '10.6'), +('TKM', 'Uzbek', 'f', '9.1999998'), +('TUV', 'Kiribati', 'f', '7.5'), +('UGA', 'Nkole', 'f', '10.7'), +('UKR', 'Russian', 'f', '32.900002'), +('HUN', 'Romani', 'f', '0.5'), +('NCL', 'French', 't', '34.299999'), +('NZL', 'Maori', 'f', '4.3000002'), +('UZB', 'Russian', 'f', '10.9'), +('BLR', 'Russian', 't', '32'), +('WLF', 'Futuna', 'f', '0'), +('VUT', 'English', 't', '28.299999'), +('VEN', 'Goajiro', 'f', '0.40000001'), +('RUS', 'Tatar', 'f', '3.2'), +('VNM', 'Tho', 'f', '1.8'), +('EST', 'Russian', 'f', '27.799999'), +('USA', 'Spanish', 'f', '7.5'), +('VIR', 'Spanish', 'f', '13.3'), +('ZWE', 'Ndebele', 'f', '16.200001'), +('PSE', 'Hebrew', 'f', '4.0999999'), +('AFG', 'Uzbek', 'f', '8.8000002'), +('NLD', 'Arabic', 'f', '0.89999998'), +('ANT', 'Dutch', 't', '0'), +('ALB', 'Macedonian', 'f', '0.1'), +('ASM', 'Tongan', 'f', '3.0999999'), +('AND', 'Portuguese', 'f', '10.8'), +('AGO', 'Kongo', 'f', '13.2'), +('ARG', 'Indian Languages', 'f', '0.30000001'), +('ABW', 'Spanish', 'f', '7.4000001'), +('AUS', 'Greek', 'f', '1.6'), +('AZE', 'Lezgian', 'f', '2.3'), +('BGD', 'Marma', 'f', '0.2'), +('BEL', 'Italian', 'f', '2.4000001'), +('BLZ', 'Maya Languages', 'f', '9.6000004'), +('BEN', 'Adja', 'f', '11.1'), +('BTN', 'Asami', 'f', '15.2'), +('BOL', 'Aimará', 't', '3.2'), +('BWA', 'San', 'f', '3.5'), +('BRA', 'Italian', 'f', '0.40000001'), +('GBR', 'Gaeli', 'f', '0.1'), +('BRN', 'Chinese', 'f', '9.3000002'), +('BGR', 'Romani', 'f', '3.7'), +('BFA', 'Gurma', 'f', '5.6999998'), +('BDI', 'Swahili', 'f', '0'), +('CHL', 'Aimará', 'f', '0.5'), +('CRI', 'Chibcha', 'f', '0.30000001'), +('DJI', 'Arabic', 't', '10.6'), +('ERI', 'Afar', 'f', '4.3000002'), +('ESP', 'Galecian', 'f', '6.4000001'), +('ZAF', 'Afrikaans', 't', '14.3'), +('ETH', 'Tigrinja', 'f', '7.1999998'), +('PHL', 'Ilocano', 'f', '9.3000002'), +('GAB', 'Mpongwe', 'f', '14.6'), +('GMB', 'Wolof', 'f', '12.6'), +('GEO', 'Armenian', 'f', '6.8000002'), +('GHA', 'Ewe', 'f', '11.9'), +('GUM', 'Philippene Languages', 'f', '19.700001'), +('GTM', 'Cakchiquel', 'f', '8.8999996'), +('GIN', 'Susu', 'f', '11'), +('GNB', 'Balante', 'f', '14.6'), +('GUY', 'Arawakan', 'f', '1.4'), +('HND', 'Creole English', 'f', '0.2'), +('HKG', 'Fukien', 'f', '1.9'), +('IDN', 'Malay', 't', '12.1'), +('IND', 'Telugu', 'f', '7.8000002'), +('IRQ', 'Azerbaijani', 'f', '1.7'), +('IRN', 'Kurdish', 'f', '9.1000004'), +('ISR', 'Russian', 'f', '8.8999996'), +('ITA', 'Friuli', 'f', '1.2'), +('AUT', 'Turkish', 'f', '1.5'), +('JPN', 'Chinese', 'f', '0.2'), +('JOR', 'Armenian', 'f', '1'), +('YUG', 'Hungarian', 'f', '3.4000001'), +('KHM', 'Chinese', 'f', '3.0999999'), +('CMR', 'Duala', 'f', '10.9'), +('CAN', 'Chinese', 'f', '2.5'), +('KAZ', 'Ukrainian', 'f', '5'), +('KEN', 'Luo', 'f', '12.8'), +('CAF', 'Mandjia', 'f', '14.8'), +('CHN', 'Mantšu', 'f', '0.89999998'), +('KGZ', 'Uzbek', 'f', '14.1'), +('COL', 'Creole English', 'f', '0.1'), +('COM', 'Comorian-madagassi', 'f', '5.5'), +('COG', 'Mboshi', 'f', '11.4'), +('COD', 'Mongo', 'f', '13.5'), +('LAO', 'Thai', 'f', '7.8000002'), +('LVA', 'Belorussian', 'f', '4.0999999'), +('LSO', 'English', 't', '0'), +('LBN', 'French', 'f', '0'), +('LBR', 'Grebo', 'f', '8.8999996'), +('LIE', 'Turkish', 'f', '2.5'), +('LTU', 'Polish', 'f', '7'), +('LUX', 'Italian', 'f', '4.5999999'), +('MAC', 'Mandarin Chinese', 'f', '1.2'), +('MKD', 'Turkish', 'f', '4'), +('MWI', 'Yao', 'f', '13.2'), +('MYS', 'Tamil', 'f', '3.9000001'), +('MLI', 'Senufo and Minianka', 'f', '12'), +('MRT', 'Tukulor', 'f', '5.4000001'), +('MUS', 'French', 'f', '3.4000001'), +('MYT', 'Malagasy', 'f', '16.1'), +('MEX', 'Yucatec', 'f', '1.1'), +('FSM', 'Mortlock', 'f', '7.5999999'), +('MDA', 'Ukrainian', 'f', '8.6000004'), +('MCO', 'Italian', 'f', '16.1'), +('MNG', 'Dorbet', 'f', '2.7'), +('MOZ', 'Sena', 'f', '9.3999996'), +('MMR', 'Karen', 'f', '6.1999998'), +('NAM', 'Kavango', 'f', '9.6999998'), +('NRU', 'Chinese', 'f', '8.5'), +('NPL', 'Bhojpuri', 'f', '7.5'), +('NIC', 'Creole English', 'f', '0.5'), +('NER', 'Tamashek', 'f', '10.4'), +('NGA', 'Ibo', 'f', '18.1'), +('NOR', 'Danish', 'f', '0.40000001'), +('CIV', 'Malinke', 'f', '11.4'), +('PAK', 'Sindhi', 'f', '11.8'), +('PLW', 'English', 't', '3.2'), +('PAN', 'Guaymí', 'f', '5.3000002'), +('PRY', 'Portuguese', 'f', '3.2'), +('PER', 'Aimará', 't', '2.3'), +('MNP', 'Chinese', 'f', '7.0999999'), +('POL', 'Ukrainian', 'f', '0.60000002'), +('FRA', 'Portuguese', 'f', '1.2'), +('PYF', 'Chinese', 'f', '2.9000001'), +('REU', 'Comorian', 'f', '2.8'), +('ROM', 'Romani', 't', '0.69999999'), +('SWE', 'Southern Slavic Languages', 'f', '1.3'), +('DEU', 'Southern Slavic Languages', 'f', '1.4'), +('SLB', 'Polynesian Languages', 'f', '3.8'), +('ZMB', 'Nyanja', 'f', '7.8000002'), +('WSM', 'English', 't', '0.60000002'), +('SEN', 'Serer', 'f', '12.5'), +('SYC', 'French', 't', '1.3'), +('SLE', 'Limba', 'f', '8.3000002'), +('SGP', 'Tamil', 't', '7.4000001'), +('SVK', 'Romani', 'f', '1.7'), +('SVN', 'Hungarian', 'f', '0.5'), +('LKA', 'Mixed Languages', 'f', '19.6'), +('SDN', 'Nubian Languages', 'f', '8.1000004'), +('FIN', 'Russian', 'f', '0.40000001'), +('CHE', 'Italian', 't', '7.6999998'), +('TJK', 'Russian', 'f', '9.6999998'), +('TWN', 'Hakka', 'f', '11'), +('TZA', 'Hehet', 'f', '6.9000001'), +('DNK', 'Arabic', 'f', '0.69999999'), +('THA', 'Chinese', 'f', '12.1'), +('TGO', 'Watyi', 'f', '10.3'), +('TTO', 'Creole English', 'f', '2.9000001'), +('TCD', 'Mayo-kebbi', 'f', '11.5'), +('CZE', 'Slovak', 'f', '3.0999999'), +('TUN', 'Arabic-French-English', 'f', '3.2'), +('TUR', 'Arabic', 'f', '1.4'), +('TKM', 'Russian', 'f', '6.6999998'), +('TUV', 'English', 't', '0'), +('UGA', 'Kiga', 'f', '8.3000002'), +('UKR', 'Romanian', 'f', '0.69999999'), +('HUN', 'German', 'f', '0.40000001'), +('NCL', 'Polynesian Languages', 'f', '11.6'), +('UZB', 'Tadzhik', 'f', '4.4000001'), +('BLR', 'Ukrainian', 'f', '1.3'), +('VUT', 'French', 't', '14.2'), +('VEN', 'Warrau', 'f', '0.1'), +('RUS', 'Ukrainian', 'f', '1.3'), +('VNM', 'Thai', 'f', '1.6'), +('EST', 'Ukrainian', 'f', '2.8'), +('USA', 'French', 'f', '0.69999999'), +('VIR', 'French', 'f', '2.5'), +('ZWE', 'English', 't', '2.2'), +('AFG', 'Turkmenian', 'f', '1.9'), +('NLD', 'Turkish', 'f', '0.80000001'), +('AND', 'French', 'f', '6.1999998'), +('AGO', 'Luimbe-nganguela', 'f', '5.4000001'), +('ABW', 'Dutch', 't', '5.3000002'), +('AUS', 'Canton Chinese', 'f', '1.1'), +('AZE', 'Armenian', 'f', '2'), +('BGD', 'Garo', 'f', '0.1'), +('BEL', 'Arabic', 'f', '1.6'), +('BLZ', 'Garifuna', 'f', '6.8000002'), +('BEN', 'Aizo', 'f', '8.6999998'), +('BOL', 'Guaraní', 'f', '0.1'), +('BWA', 'Khoekhoe', 'f', '2.5'), +('BRA', 'Japanese', 'f', '0.40000001'), +('BRN', 'English', 'f', '3.0999999'), +('BGR', 'Macedonian', 'f', '2.5999999'), +('BFA', 'Busansi', 'f', '3.5'), +('CHL', 'Rapa nui', 'f', '0.2'), +('CRI', 'Chinese', 'f', '0.2'), +('ERI', 'Hadareb', 'f', '3.8'), +('ESP', 'Basque', 'f', '1.6'), +('ZAF', 'Northsotho', 'f', '9.1000004'), +('ETH', 'Gurage', 'f', '4.6999998'), +('PHL', 'Hiligaynon', 'f', '9.1000004'), +('GAB', 'Mbete', 'f', '13.8'), +('GMB', 'Diola', 'f', '9.1999998'), +('GEO', 'Azerbaijani', 'f', '5.5'), +('GHA', 'Ga-adangme', 'f', '7.8000002'), +('GUM', 'Korean', 'f', '3.3'), +('GTM', 'Kekchí', 'f', '4.9000001'), +('GIN', 'Kissi', 'f', '6'), +('GNB', 'Portuguese', 't', '8.1000004'), +('HND', 'Miskito', 'f', '0.2'), +('HKG', 'Hakka', 'f', '1.6'), +('IDN', 'Madura', 'f', '4.3000002'), +('IND', 'Marathi', 'f', '7.4000001'), +('IRQ', 'Assyrian', 'f', '0.80000001'), +('IRN', 'Gilaki', 'f', '5.3000002'), +('ITA', 'French', 'f', '0.5'), +('AUT', 'Hungarian', 'f', '0.40000001'), +('JPN', 'English', 'f', '0.1'), +('YUG', 'Romani', 'f', '1.4'), +('KHM', 'Tšam', 'f', '2.4000001'), +('CMR', 'Ful', 'f', '9.6000004'), +('CAN', 'Italian', 'f', '1.7'), +('KAZ', 'German', 'f', '3.0999999'), +('KEN', 'Kamba', 'f', '11.2'), +('CAF', 'Ngbaka', 'f', '7.5'), +('CHN', 'Hui', 'f', '0.80000001'), +('KGZ', 'Ukrainian', 'f', '1.7'), +('COL', 'Arawakan', 'f', '0.1'), +('COM', 'Comorian-Arabic', 'f', '1.6'), +('COG', 'Mbete', 'f', '4.8000002'), +('COD', 'Rwanda', 'f', '10.3'), +('LAO', 'Lao-Soung', 'f', '5.1999998'), +('LVA', 'Ukrainian', 'f', '2.9000001'), +('LBR', 'Gio', 'f', '7.9000001'), +('LTU', 'Belorussian', 'f', '1.4'), +('LUX', 'French', 't', '4.1999998'), +('MAC', 'English', 'f', '0.5'), +('MKD', 'Romani', 'f', '2.3'), +('MWI', 'Ngoni', 'f', '6.6999998'), +('MYS', 'Iban', 'f', '2.8'), +('MLI', 'Soninke', 'f', '8.6999998'), +('MRT', 'Soninke', 'f', '2.7'), +('MUS', 'Hindi', 'f', '1.2'), +('MEX', 'Zapotec', 'f', '0.60000002'), +('FSM', 'Kosrean', 'f', '7.3000002'), +('MDA', 'Gagauzi', 'f', '3.2'), +('MCO', 'English', 'f', '6.5'), +('MNG', 'Bajad', 'f', '1.9'), +('MOZ', 'Lomwe', 'f', '7.8000002'), +('MMR', 'Rakhine', 'f', '4.5'), +('NAM', 'Afrikaans', 'f', '9.5'), +('NRU', 'Tuvalu', 'f', '8.5'), +('NPL', 'Tharu', 'f', '5.4000001'), +('NIC', 'Sumo', 'f', '0.2'), +('NER', 'Ful', 'f', '9.6999998'), +('NGA', 'Ful', 'f', '11.3'), +('NOR', 'Swedish', 'f', '0.30000001'), +('CIV', 'Kru', 'f', '10.5'), +('PAK', 'Saraiki', 'f', '9.8000002'), +('PLW', 'Chinese', 'f', '1.6'), +('PAN', 'Cuna', 'f', '2'), +('PRY', 'German', 'f', '0.89999998'), +('MNP', 'Korean', 'f', '6.5'), +('POL', 'Belorussian', 'f', '0.5'), +('FRA', 'Italian', 'f', '0.40000001'), +('REU', 'Malagasy', 'f', '1.4'), +('ROM', 'German', 'f', '0.40000001'), +('SWE', 'Arabic', 'f', '0.80000001'), +('DEU', 'Italian', 'f', '0.69999999'), +('ZMB', 'Lozi', 'f', '6.4000001'), +('SEN', 'Diola', 'f', '5'), +('SLE', 'Kono-vai', 'f', '5.0999999'), +('SVK', 'Czech and Moravian', 'f', '1.1'), +('SDN', 'Beja', 'f', '6.4000001'), +('FIN', 'Estonian', 'f', '0.2'), +('CHE', 'Romansh', 't', '0.60000002'), +('TWN', 'Ami', 'f', '0.60000002'), +('TZA', 'Haya', 'f', '5.9000001'), +('DNK', 'German', 'f', '0.5'), +('THA', 'Malay', 'f', '3.5999999'), +('TGO', 'Kotokoli', 'f', '5.6999998'), +('TCD', 'Kanem-bornu', 'f', '9'), +('CZE', 'Polish', 'f', '0.60000002'), +('TKM', 'Kazakh', 'f', '2'), +('UGA', 'Soga', 'f', '8.1999998'), +('UKR', 'Bulgariana', 'f', '0.30000001'), +('HUN', 'Serbo-Croatian', 'f', '0.2'), +('UZB', 'Kazakh', 'f', '3.8'), +('BLR', 'Polish', 'f', '0.60000002'), +('RUS', 'Chuvash', 'f', '0.89999998'), +('VNM', 'Muong', 'f', '1.5'), +('EST', 'Belorussian', 'f', '1.4'), +('USA', 'German', 'f', '0.69999999'), +('ZWE', 'Nyanja', 'f', '2.2'), +('AFG', 'Balochi', 'f', '0.89999998'), +('AGO', 'Nyaneka-nkhumbi', 'f', '5.4000001'), +('AUS', 'Arabic', 'f', '1'), +('BGD', 'Khasi', 'f', '0.1'), +('BEL', 'German', 't', '1'), +('BEN', 'Bariba', 'f', '8.6999998'), +('BWA', 'Ndebele', 'f', '1.3'), +('BRA', 'Indian Languages', 'f', '0.2'), +('BFA', 'Dagara', 'f', '3.0999999'), +('ERI', 'Bilin', 'f', '3'), +('ZAF', 'English', 't', '8.5'), +('ETH', 'Somali', 'f', '4.0999999'), +('PHL', 'Bicol', 'f', '5.6999998'), +('GMB', 'Soninke', 'f', '7.5999999'), +('GEO', 'Osseetti', 'f', '2.4000001'), +('GHA', 'Gurma', 'f', '3.3'), +('GUM', 'Japanese', 'f', '2'), +('GTM', 'Mam', 'f', '2.7'), +('GIN', 'Kpelle', 'f', '4.5999999'), +('GNB', 'Malinke', 'f', '6.9000001'), +('HKG', 'Chiu chau', 'f', '1.4'), +('IDN', 'Minangkabau', 'f', '2.4000001'), +('IND', 'Tamil', 'f', '6.3000002'), +('IRQ', 'Persian', 'f', '0.80000001'), +('IRN', 'Luri', 'f', '4.3000002'), +('ITA', 'German', 'f', '0.5'), +('AUT', 'Slovene', 'f', '0.40000001'), +('JPN', 'Philippene Languages', 'f', '0.1'), +('YUG', 'Slovak', 'f', '0.69999999'), +('CMR', 'Tikar', 'f', '7.4000001'), +('CAN', 'German', 'f', '1.6'), +('KAZ', 'Uzbek', 'f', '2.3'), +('KEN', 'Kalenjin', 'f', '10.8'), +('CAF', 'Sara', 'f', '6.4000001'), +('CHN', 'Miao', 'f', '0.69999999'), +('KGZ', 'Tatar', 'f', '1.3'), +('COL', 'Caribbean', 'f', '0.1'), +('COM', 'Comorian-Swahili', 'f', '0.5'), +('COG', 'Punu', 'f', '2.9000001'), +('COD', 'Zande', 'f', '6.0999999'), +('LVA', 'Polish', 'f', '2.0999999'), +('LBR', 'Kru', 'f', '7.1999998'), +('LTU', 'Ukrainian', 'f', '1.1'), +('LUX', 'German', 't', '2.3'), +('MKD', 'Serbo-Croatian', 'f', '2'), +('MYS', 'English', 'f', '1.6'), +('MLI', 'Tamashek', 'f', '7.3000002'), +('MRT', 'Ful', 'f', '1.2'), +('MUS', 'Tamil', 'f', '0.80000001'), +('MEX', 'Mixtec', 'f', '0.60000002'), +('FSM', 'Yap', 'f', '5.8000002'), +('MDA', 'Bulgariana', 'f', '1.6'), +('MNG', 'Buryat', 'f', '1.7'), +('MOZ', 'Shona', 'f', '6.5'), +('MMR', 'Mon', 'f', '2.4000001'), +('NAM', 'Herero', 'f', '8'), +('NRU', 'English', 't', '7.5'), +('NPL', 'Tamang', 'f', '4.9000001'), +('NER', 'Kanuri', 'f', '4.4000001'), +('NGA', 'Ibibio', 'f', '5.5999999'), +('NOR', 'Saame', 'f', '0'), +('CIV', '[South]Mande', 'f', '7.6999998'), +('PAK', 'Urdu', 't', '7.5999999'), +('PAN', 'Embera', 'f', '0.60000002'), +('MNP', 'English', 't', '4.8000002'), +('FRA', 'Spanish', 'f', '0.40000001'), +('REU', 'Tamil', 'f', '0'), +('ROM', 'Ukrainian', 'f', '0.30000001'), +('SWE', 'Spanish', 'f', '0.60000002'), +('DEU', 'Greek', 'f', '0.40000001'), +('ZMB', 'Chewa', 'f', '5.6999998'), +('SEN', 'Malinke', 'f', '3.8'), +('SLE', 'Bullom-sherbro', 'f', '3.8'), +('SVK', 'Ukrainian and Russian', 'f', '0.60000002'), +('SDN', 'Nuer', 'f', '4.9000001'), +('FIN', 'Saame', 'f', '0'), +('TWN', 'Atayal', 'f', '0.40000001'), +('TZA', 'Makonde', 'f', '5.9000001'), +('DNK', 'English', 'f', '0.30000001'), +('THA', 'Khmer', 'f', '1.3'), +('TGO', 'Ane', 'f', '5.6999998'), +('TCD', 'Ouaddai', 'f', '8.6999998'), +('CZE', 'German', 'f', '0.5'), +('UGA', 'Teso', 'f', '6'), +('UKR', 'Hungarian', 'f', '0.30000001'), +('HUN', 'Romanian', 'f', '0.1'), +('UZB', 'Karakalpak', 'f', '2'), +('RUS', 'Bashkir', 'f', '0.69999999'), +('VNM', 'Chinese', 'f', '1.4'), +('EST', 'Finnish', 'f', '0.69999999'), +('USA', 'Italian', 'f', '0.60000002'), +('AGO', 'Chokwe', 'f', '4.1999998'), +('AUS', 'Vietnamese', 'f', '0.80000001'), +('BGD', 'Santhali', 'f', '0.1'), +('BEL', 'Turkish', 'f', '0.89999998'), +('BEN', 'Somba', 'f', '6.6999998'), +('BFA', 'Dyula', 'f', '2.5999999'), +('ERI', 'Saho', 'f', '3'), +('ZAF', 'Tswana', 'f', '8.1000004'), +('ETH', 'Sidamo', 'f', '3.2'), +('PHL', 'Waray-waray', 'f', '3.8'), +('GEO', 'Abhyasi', 'f', '1.7'), +('GHA', 'Joruba', 'f', '1.3'), +('GIN', 'Yalunka', 'f', '2.9000001'), +('GNB', 'Mandyako', 'f', '4.9000001'), +('IDN', 'Batakki', 'f', '2.2'), +('IND', 'Urdu', 'f', '5.0999999'), +('IRN', 'Mazandarani', 'f', '3.5999999'), +('ITA', 'Albaniana', 'f', '0.2'), +('AUT', 'Polish', 'f', '0.2'), +('JPN', 'Ainu', 'f', '0'), +('YUG', 'Macedonian', 'f', '0.5'), +('CMR', 'Mandara', 'f', '5.6999998'), +('CAN', 'Polish', 'f', '0.69999999'), +('KAZ', 'Tatar', 'f', '2'), +('KEN', 'Gusii', 'f', '6.0999999'), +('CAF', 'Mbum', 'f', '6.4000001'), +('CHN', 'Uighur', 'f', '0.60000002'), +('KGZ', 'Kazakh', 'f', '0.80000001'), +('COG', 'Sango', 'f', '2.5999999'), +('COD', 'Ngala and Bangi', 'f', '5.8000002'), +('LVA', 'Lithuanian', 'f', '1.2'), +('LBR', 'Mano', 'f', '7.1999998'), +('MYS', 'Dusun', 'f', '1.1'), +('MLI', 'Songhai', 'f', '6.9000001'), +('MRT', 'Zenaga', 'f', '1.2'), +('MUS', 'Marathi', 'f', '0.69999999'), +('MEX', 'Otomí', 'f', '0.40000001'), +('FSM', 'Wolea', 'f', '3.7'), +('MNG', 'Dariganga', 'f', '1.4'), +('MOZ', 'Tswa', 'f', '6'), +('MMR', 'Chin', 'f', '2.2'), +('NAM', 'Caprivi', 'f', '4.6999998'), +('NPL', 'Newari', 'f', '3.7'), +('NGA', 'Kanuri', 'f', '4.0999999'), +('PAK', 'Balochi', 'f', '3'), +('PAN', 'Arabic', 'f', '0.60000002'), +('MNP', 'Carolinian', 'f', '4.8000002'), +('FRA', 'Turkish', 'f', '0.40000001'), +('ROM', 'Serbo-Croatian', 'f', '0.1'), +('SWE', 'Norwegian', 'f', '0.5'), +('DEU', 'Polish', 'f', '0.30000001'), +('ZMB', 'Nsenga', 'f', '4.3000002'), +('SEN', 'Soninke', 'f', '1.3'), +('SLE', 'Ful', 'f', '3.8'), +('SDN', 'Zande', 'f', '2.7'), +('TWN', 'Paiwan', 'f', '0.30000001'), +('TZA', 'Nyakusa', 'f', '5.4000001'), +('DNK', 'Swedish', 'f', '0.30000001'), +('THA', 'Kuy', 'f', '1.1'), +('TGO', 'Moba', 'f', '5.4000001'), +('TCD', 'Hadjarai', 'f', '6.6999998'), +('CZE', 'Silesiana', 'f', '0.40000001'), +('UGA', 'Lango', 'f', '5.9000001'), +('UKR', 'Belorussian', 'f', '0.30000001'), +('HUN', 'Slovak', 'f', '0.1'), +('UZB', 'Tatar', 'f', '1.8'), +('RUS', 'Chechen', 'f', '0.60000002'), +('VNM', 'Khmer', 'f', '1.4'), +('USA', 'Chinese', 'f', '0.60000002'), +('AGO', 'Luvale', 'f', '3.5999999'), +('AUS', 'Serbo-Croatian', 'f', '0.60000002'), +('BGD', 'Tripuri', 'f', '0.1'), +('BEN', 'Ful', 'f', '5.5999999'), +('ZAF', 'Southsotho', 'f', '7.5999999'), +('ETH', 'Walaita', 'f', '2.8'), +('PHL', 'Pampango', 'f', '3'), +('GIN', 'Loma', 'f', '2.3'), +('IDN', 'Bugi', 'f', '2.2'), +('IND', 'Gujarati', 'f', '4.8000002'), +('IRN', 'Balochi', 'f', '2.3'), +('ITA', 'Slovene', 'f', '0.2'), +('AUT', 'Czech', 'f', '0.2'), +('CMR', 'Maka', 'f', '4.9000001'), +('CAN', 'Spanish', 'f', '0.69999999'), +('KEN', 'Meru', 'f', '5.5'), +('CHN', 'Yi', 'f', '0.60000002'), +('KGZ', 'Tadzhik', 'f', '0.80000001'), +('COD', 'Rundi', 'f', '3.8'), +('LBR', 'Loma', 'f', '5.8000002'), +('MOZ', 'Chuabo', 'f', '5.6999998'), +('MMR', 'Kachin', 'f', '1.4'), +('NAM', 'San', 'f', '1.9'), +('NPL', 'Hindi', 'f', '3'), +('NGA', 'Edo', 'f', '3.3'), +('PAK', 'Hindko', 'f', '2.4000001'), +('SLE', 'Kuranko', 'f', '3.4000001'), +('SDN', 'Bari', 'f', '2.5'), +('TZA', 'Chaga and Pare', 'f', '4.9000001'), +('DNK', 'Norwegian', 'f', '0.30000001'), +('TGO', 'Naudemba', 'f', '4.0999999'), +('TCD', 'Tandjile', 'f', '6.5'), +('CZE', 'Romani', 'f', '0.30000001'), +('UGA', 'Lugbara', 'f', '4.6999998'), +('UKR', 'Polish', 'f', '0.1'), +('RUS', 'Mordva', 'f', '0.5'), +('VNM', 'Nung', 'f', '1.1'), +('USA', 'Tagalog', 'f', '0.40000001'), +('AGO', 'Ambo', 'f', '2.4000001'), +('AUS', 'German', 'f', '0.60000002'), +('ZAF', 'Tsonga', 'f', '4.3000002'), +('PHL', 'Pangasinan', 'f', '1.8'), +('IDN', 'Banja', 'f', '1.8'), +('IND', 'Kannada', 'f', '3.9000001'), +('IRN', 'Arabic', 'f', '2.2'), +('ITA', 'Romani', 'f', '0.2'), +('AUT', 'Romanian', 'f', '0.2'), +('CMR', 'Masana', 'f', '3.9000001'), +('CAN', 'Portuguese', 'f', '0.69999999'), +('KEN', 'Nyika', 'f', '4.8000002'), +('CHN', 'Tujia', 'f', '0.5'), +('COD', 'Teke', 'f', '2.7'), +('LBR', 'Malinke', 'f', '5.0999999'), +('MOZ', 'Ronga', 'f', '3.7'), +('MMR', 'Kayah', 'f', '0.40000001'), +('NAM', 'German', 'f', '0.89999998'), +('NGA', 'Tiv', 'f', '2.3'), +('PAK', 'Brahui', 'f', '1.2'), +('SLE', 'Yalunka', 'f', '3.4000001'), +('SDN', 'Fur', 'f', '2.0999999'), +('TZA', 'Luguru', 'f', '4.9000001'), +('TGO', 'Gurma', 'f', '3.4000001'), +('TCD', 'Gorane', 'f', '6.1999998'), +('CZE', 'Hungarian', 'f', '0.2'), +('UGA', 'Gisu', 'f', '4.5'), +('RUS', 'Kazakh', 'f', '0.40000001'), +('VNM', 'Miao', 'f', '0.89999998'), +('USA', 'Polish', 'f', '0.30000001'), +('AGO', 'Luchazi', 'f', '2.4000001'), +('ZAF', 'Swazi', 'f', '2.5'), +('PHL', 'Maguindanao', 'f', '1.4'), +('IDN', 'Bali', 'f', '1.7'), +('IND', 'Malajalam', 'f', '3.5999999'), +('IRN', 'Bakhtyari', 'f', '1.7'), +('CAN', 'Punjabi', 'f', '0.69999999'), +('KEN', 'Masai', 'f', '1.6'), +('CHN', 'Mongolian', 'f', '0.40000001'), +('COD', 'Boa', 'f', '2.3'), +('MOZ', 'Marendje', 'f', '3.5'), +('NGA', 'Ijo', 'f', '1.8'), +('SDN', 'Chilluk', 'f', '1.7'), +('TZA', 'Shambala', 'f', '4.3000002'), +('UGA', 'Acholi', 'f', '4.4000001'), +('RUS', 'Avarian', 'f', '0.40000001'), +('VNM', 'Man', 'f', '0.69999999'), +('USA', 'Korean', 'f', '0.30000001'), +('ZAF', 'Venda', 'f', '2.2'), +('PHL', 'Maranao', 'f', '1.3'), +('IND', 'Orija', 'f', '3.3'), +('IRN', 'Turkmenian', 'f', '1.6'), +('CAN', 'Ukrainian', 'f', '0.60000002'), +('KEN', 'Turkana', 'f', '1.4'), +('CHN', 'Tibetan', 'f', '0.40000001'), +('COD', 'Chokwe', 'f', '1.8'), +('MOZ', 'Nyanja', 'f', '3.3'), +('NGA', 'Bura', 'f', '1.6'), +('SDN', 'Lotuko', 'f', '1.5'), +('TZA', 'Gogo', 'f', '3.9000001'), +('UGA', 'Rwanda', 'f', '3.2'), +('RUS', 'Mari', 'f', '0.40000001'), +('USA', 'Vietnamese', 'f', '0.2'), +('ZAF', 'Ndebele', 'f', '1.5'), +('IND', 'Punjabi', 'f', '2.8'), +('CAN', 'Dutch', 'f', '0.5'), +('CHN', 'Puyi', 'f', '0.2'), +('TZA', 'Ha', 'f', '3.5'), +('RUS', 'Udmur', 'f', '0.30000001'), +('USA', 'Japanese', 'f', '0.2'), +('IND', 'Asami', 'f', '1.5'), +('CAN', 'Eskimo Languages', 'f', '0.1'), +('CHN', 'Dong', 'f', '0.2'), +('RUS', 'Belorussian', 'f', '0.30000001'), +('USA', 'Portuguese', 'f', '0.2'); + +ALTER TABLE city + ADD CONSTRAINT city_pkey PRIMARY KEY (id); + +ALTER TABLE country + ADD CONSTRAINT country_pkey PRIMARY KEY (code); + +ALTER TABLE countrylanguage + ADD CONSTRAINT countrylanguage_pkey PRIMARY KEY (countrycode, language); + +ALTER TABLE country + ADD CONSTRAINT country_capital_fkey FOREIGN KEY (capital) REFERENCES city(id); + +ALTER TABLE countrylanguage + ADD CONSTRAINT countrylanguage_countrycode_fkey FOREIGN KEY (countrycode) REFERENCES country(code); diff --git a/modules/sql/shared/src/test/resources/db/array-join.sql b/testdata/pg/array-join.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/array-join.sql rename to testdata/pg/array-join.sql diff --git a/modules/sql/shared/src/test/resources/db/coalesce.sql b/testdata/pg/coalesce.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/coalesce.sql rename to testdata/pg/coalesce.sql diff --git a/modules/sql/shared/src/test/resources/db/composite-keys.sql b/testdata/pg/composite-keys.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/composite-keys.sql rename to testdata/pg/composite-keys.sql diff --git a/modules/sql/shared/src/test/resources/db/cursor-json.sql b/testdata/pg/cursor-json.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/cursor-json.sql rename to testdata/pg/cursor-json.sql diff --git a/modules/sql/shared/src/test/resources/db/embedding.sql b/testdata/pg/embedding.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/embedding.sql rename to testdata/pg/embedding.sql diff --git a/modules/sql/shared/src/test/resources/db/embedding2.sql b/testdata/pg/embedding2.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/embedding2.sql rename to testdata/pg/embedding2.sql diff --git a/modules/sql/shared/src/test/resources/db/filter-join-alias.sql b/testdata/pg/filter-join-alias.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/filter-join-alias.sql rename to testdata/pg/filter-join-alias.sql diff --git a/modules/sql/shared/src/test/resources/db/filter-order-offset-limit-2.sql b/testdata/pg/filter-order-offset-limit-2.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/filter-order-offset-limit-2.sql rename to testdata/pg/filter-order-offset-limit-2.sql diff --git a/modules/sql/shared/src/test/resources/db/filter-order-offset-limit.sql b/testdata/pg/filter-order-offset-limit.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/filter-order-offset-limit.sql rename to testdata/pg/filter-order-offset-limit.sql diff --git a/modules/sql/shared/src/test/resources/db/graph.sql b/testdata/pg/graph.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/graph.sql rename to testdata/pg/graph.sql diff --git a/modules/sql/shared/src/test/resources/db/interfaces.sql b/testdata/pg/interfaces.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/interfaces.sql rename to testdata/pg/interfaces.sql diff --git a/modules/sql/shared/src/test/resources/db/jsonb.sql b/testdata/pg/jsonb.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/jsonb.sql rename to testdata/pg/jsonb.sql diff --git a/modules/sql/shared/src/test/resources/db/like.sql b/testdata/pg/like.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/like.sql rename to testdata/pg/like.sql diff --git a/modules/sql/shared/src/test/resources/db/movies.sql b/testdata/pg/movies.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/movies.sql rename to testdata/pg/movies.sql diff --git a/testdata/pg/mutation.sql b/testdata/pg/mutation.sql new file mode 100644 index 00000000..99e33c26 --- /dev/null +++ b/testdata/pg/mutation.sql @@ -0,0 +1,3 @@ + +-- A sequence to test out inserting into a table. +CREATE SEQUENCE city_id START WITH 5000; diff --git a/modules/sql/shared/src/test/resources/db/projection.sql b/testdata/pg/projection.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/projection.sql rename to testdata/pg/projection.sql diff --git a/modules/sql/shared/src/test/resources/db/recursive-interfaces.sql b/testdata/pg/recursive-interfaces.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/recursive-interfaces.sql rename to testdata/pg/recursive-interfaces.sql diff --git a/modules/sql/shared/src/test/resources/db/sibling-lists.sql b/testdata/pg/sibling-lists.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/sibling-lists.sql rename to testdata/pg/sibling-lists.sql diff --git a/modules/sql/shared/src/test/resources/db/tree.sql b/testdata/pg/tree.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/tree.sql rename to testdata/pg/tree.sql diff --git a/modules/sql/shared/src/test/resources/db/unions.sql b/testdata/pg/unions.sql similarity index 100% rename from modules/sql/shared/src/test/resources/db/unions.sql rename to testdata/pg/unions.sql diff --git a/modules/sql/shared/src/test/resources/db/world.sql b/testdata/pg/world.sql similarity index 99% rename from modules/sql/shared/src/test/resources/db/world.sql rename to testdata/pg/world.sql index 8861c16d..07dbd2e2 100644 --- a/modules/sql/shared/src/test/resources/db/world.sql +++ b/testdata/pg/world.sql @@ -38,7 +38,7 @@ CREATE TABLE country ( CREATE TABLE countrylanguage ( countrycode character(3) NOT NULL, - "language" text NOT NULL, + language text NOT NULL, isofficial boolean NOT NULL, percentage real NOT NULL ); @@ -4377,7 +4377,7 @@ UMI United States Minor Outlying Islands Oceania Micronesia/Caribbean 16 \N 0 \N -- Data for Name: countrylanguage; Type: TABLE DATA; Schema: public; Owner: chriskl -- -COPY countrylanguage (countrycode, "language", isofficial, percentage) FROM stdin; +COPY countrylanguage (countrycode, language, isofficial, percentage) FROM stdin; AFG Pashto t 52.400002 NLD Dutch t 95.599998 ANT Papiamento t 86.199997 @@ -5372,7 +5372,7 @@ ALTER TABLE ONLY country ADD CONSTRAINT country_pkey PRIMARY KEY (code); ALTER TABLE ONLY countrylanguage - ADD CONSTRAINT countrylanguage_pkey PRIMARY KEY (countrycode, "language"); + ADD CONSTRAINT countrylanguage_pkey PRIMARY KEY (countrycode, language); ALTER TABLE ONLY country ADD CONSTRAINT country_capital_fkey FOREIGN KEY (capital) REFERENCES city(id);